中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PhpOffice怎么樣才能寫出一個漂亮的表格

發布時間:2021-01-25 12:44:57 來源:億速云 閱讀:334 作者:小新 欄目:編程語言

這篇文章主要介紹PhpOffice怎么樣才能寫出一個漂亮的表格,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

先上表格

PhpOffice怎么樣才能寫出一個漂亮的表格

思路

  • 確定總共有多少列,需要確定表頭要合并多少單元格,可以多預留 1~2 列,如果用不到,最后把寬度設置為 0

  • 剩下的就是合并單元格,設置單元格樣式

excel 部分類結構

注意,里面列出來的有些是方法名,有些是類屬性,并且只列出來了本文中使用的屬性,具體還要去看看相應的類文件

Speadsheet      // 實例化 excel
    Sheet           // 當前活動 sheet   PhpOffice\PhpSpreadsheet\Worksheet\Worksheet
        getColumnDimension  // 操作列
            width               // 設置列寬
            autoSize            // 自動大小
        getRowDimension     // 操作行
            height              // 設置行高
        getCell             // 獲取要操作的單元格(An:Gn),如 (A2:G7)
            style
                同Speadsheet 下的 Style
            setValue            // 設置值
        mergeCell           // 合并單元格
        pageSetup           // 頁面設置,包含紙張大小,比如 A4
            ...
        pageMargins         // 頁邊距
            ...
        headerFooter        // 頁眉頁腳
            ...
        ...
    Style           // 處理樣式             PhpOffice\PhpSpreadsheet\Style\Style
        Font                // 處理字體
            size                // 字體大小
            bold                // 加粗
            underline           // 下劃線
            color               // 處理顏色
                argb                // 帶透明度顏色
                rgb                 // 顏色
        Fill                // 處理填充
            fillType            // 填充方式
            startColor          // 開始顏色(不清楚用處)
            endColor            // 結束顏色(不清楚用處)
            color           // 處理顏色
                argb                // 帶透明度顏色 背景色帶透明
                rgb                 // 顏色         背景色
        Borders
        Alignment
        NumberFormat
        Protection

實例化

之后的例子,將使用下面的變量

$spreadsheet = new Spreadsheet();       // 實例化 excel 操作類,默認初始化 sheet 序號為 0

$sheet = $spreadsheet->getActiveSheet(0);       // 拿到要操作的 sheet,必須是已存在的

// 獲取操作表格樣式的類(全局樣式)
$defaultStyle = $spreadsheet->getDefaultStyle();        // PhpOffice\PhpSpreadsheet\Style\Style 實例

使用示例

設置表格樣式
操作文字對齊方式
// 獲取操作對齊方式 類
$align = $defaultStyle->getAlignment();

// 設置 Horizontal(水平) 和 Vertical(垂直) 都居中,一個類中的方法,可以連貫操作
$align->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER)

// 僅水平居中
$align->setHorizontal(Alignment::HORIZONTAL_CENTER);
// 僅垂直居中
$align->setVertical(Alignment::VERTICAL_CENTER);
操作邊框
// 獲取操作對齊方式 類
$border = $defaultStyle->getBorders();
// 設置底部邊框
$border->getBottom()->setBorderStyle(Border::BORDER_THIN)
操作字體
// 獲取字體操作類
$font = $defaultStyle->getFont()

// 設置字體 18, 加粗,加下劃線
$font->setSize(18)->setBold(true)->setUnderline(Font::UNDERLINE_SINGLE);
// 操作顏色,需要先獲取顏色操作 類
$font->getColor()->setRGB('333333');
操作列
$column = $sheet->getColumnDimension('A')

// 設置列寬
$column->setWidth(7);

完整可直接運行示例

// 引入必要類
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Border;

$spreadsheet = new Spreadsheet();

// 獲取活動 sheet
$sheet = $spreadsheet->getActiveSheet(0);
// 設置表格全部上下居中
$defaultStyle = $spreadsheet->getDefaultStyle();
$defaultStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
$defaultStyle->getFont()->getColor()->setRGB('333333');

// 設置列寬
$sheet->getColumnDimension('A')->setWidth(7);
$sheet->getColumnDimension('B')->setWidth(35);
$sheet->getColumnDimension('C')->setWidth(11);
$sheet->getColumnDimension('D')->setWidth(12);
$sheet->getColumnDimension('E')->setWidth(12);
$sheet->getColumnDimension('F')->setWidth(0);           // 預留列
$sheet->getColumnDimension('G')->setWidth(14);

$line = 1;
// 大標題
// 合并單元格
$sheet->mergeCells('A'. $line .':G'. $line);            // 合并單元格
$sheet->getRowDimension($line)->setRowHeight(40);       // 設置行高
$ATitle = $sheet->getCell('A' . $line);                 // 獲取單元格
$ATitle->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);        // 內容水平居中
$ATitle->getStyle('A' . $line)->getFont()->setSize(22)->setBold(true);                              // 字體大小,加粗
$ATitle->setValue('Smallnews - 門店訂單');

$line ++;
// 店長信息
$sheet->mergeCells('A' . $line . ':G' . $line);
$sheet->getStyle('A' . $line . ':G' . $line)->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN);       // 下邊框樣式
$AStore = $sheet->getCell('A' . $line);
$AStore->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);                          // 內容水平居左
$AStore->getStyle('A' . $line)->getFont()->setSize(16)->setBold(true);                                              // 字體大小,加粗
$AStore->setValue('Smallnews/157****1560');

$line ++;
// 門店地址
$sheet->mergeCells('A' . $line . ':G' . $line);
$AAddress = $sheet->getCell('A' . $line);
$AAddress->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
$AAddress->getStyle('A' . $line)->getFont()->setSize(14);
$AAddress->setValue('北京望京 SOHO');

$line ++;
// 運單統計
$sheet->mergeCells('A' . $line . ':B' . $line);         // AB 合并
$sheet->getRowDimension($line)->setRowHeight(40);       // 設置行高
$ATotalOrder = $sheet->getCell('A' . $line);
$ATotalOrder->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT)->setVertical(Alignment::VERTICAL_BOTTOM);        // 內容水平居左,垂直居下
$ATotalOrder->getStyle('A' . $line)->getFont()->setSize(12);
$ATotalOrder->setValue('訂單數量:5');

$sheet->mergeCells('C' . $line . ':D' . $line);         // CD 合并
$CTotalGoods = $sheet->getCell('C' . $line);
$CTotalGoods->getStyle('C' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT)->setVertical(Alignment::VERTICAL_BOTTOM);        // 內容水平居左,垂直居下
$CTotalGoods->getStyle('C' . $line)->getFont()->setSize(12);
$CTotalGoods->setValue('商品總量:20');

$sheet->mergeCells('E' . $line . ':G' . $line);         // EFG 合并
$ESend = $sheet->getCell('E' . $line);
$ESend->getStyle('E' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT)->setVertical(Alignment::VERTICAL_BOTTOM);             // 內容水平居左,垂直居下
$ESend->getStyle('E' . $line)->getFont()->setSize(12);
$ESend->setValue('發貨時間:' . date('Y-m-d'));

$line ++;
// 增加一個空行,充當上下內容的 margin
$sheet->mergeCells('A' . $line . ':G' . $line);
$sheet->getRowDimension($line)->setRowHeight(6);

$line ++;

// 模擬訂單數據
$orders = [
    ['items' => [
        ['goods_title' => '這是個名字很長的商品,真的很長, 不信你看,肯定超過了表格寬度'],
        ['goods_title' => '這是個名字比較短的商品'],
    ]],
    ['items' => [
        ['goods_title' => '轉向 衛衣秋季潮牌新款寬松時尚套頭紫橘色橙色短款連帽衛衣女'],
        ['goods_title' => '芙清醫美面膜醫用男女淡化痘印抗菌敷料水光針術后修復皮炎祛痘'],
        ['goods_title' => '經典麻辣鍋底'],
    ]]
];

// 訂單數據 
foreach ($orders as $order) {
    // 購買信息
    $sheet->getRowDimension($line)->setRowHeight(30);
    $sheet->getStyle('A' . $line . ':G' . $line)->getFont()->setSize(14);
    $sheet->getStyle('A' . $line . ':G' . $line)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('CCCCCC');
    $sheet->mergeCells('A' . $line . ':B' . $line);
    $AUser = $sheet->getCell('A' . $line);
    $AUser->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
    $AUser->getStyle('A' . $line)->getFont()->setSize(15)->setBold(true);

    // 模擬用戶數據
    $user = [ 'nickname' => 'Smallnews', 'mobile' => '15788881560' ];
    $nickname = mb_strlen($user['nickname']) > 7 ? mb_substr($user['nickname'], 0, 6) . '**' : $user['nickname'];
    $AUser->setValue($nickname . ($user['mobile'] ?  ' /  ' .substr($user['mobile'], 0, 3) . '****' . substr($user['mobile'], 7) : ''));

    $sheet->mergeCells('C' . $line . ':G' . $line);
    $CTotal = $sheet->getCell('C' . $line);
    $CTotal->getStyle('C' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
    $CTotal->getStyle('C' . $line)->getFont()->setSize(14);
    $CTotal->setValue('共 2 種商品,共 3 件,實付 200 元');

    $line++;
    // 增加一個空行,充當上下內容的 margin
    $sheet->mergeCells('A' . $line . ':G' . $line);
    $sheet->getRowDimension($line)->setRowHeight(6);

    $line ++;
    // 訂單商品信息
    $sheet->getStyle('A' . $line . ':G' . ($line + count($order['items'])))->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);     // 根據商品數量, 設置區域的邊框

    $sheet->setCellValue('A' . $line, '序號');
    $sheet->setCellValue('B' . $line, '商品名稱');
    $sheet->setCellValue('C' . $line, '單價');
    $sheet->setCellValue('D' . $line, '優惠');
    $sheet->setCellValue('E' . $line, '數量');
    $sheet->setCellValue('F' . $line, '');
    $sheet->setCellValue('G' . $line, '是否提貨');

    foreach ($order['items'] as $key => $item) {
        $line ++;
        $sheet->setCellValue('A' . $line, ($key + 1));
        $sheet->getStyle('B' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);               // 商品名稱 水平居左
        $goods_title = mb_strlen($item['goods_title']) > 16 ? mb_substr($item['goods_title'], 0, 14) . '**' : $item['goods_title'];
        $sheet->setCellValue('B' . $line, $goods_title);
        $sheet->setCellValue('C' . $line, '22.22');
        $sheet->setCellValue('D' . $line, '11.11');
        $sheet->setCellValue('E' . $line, 3);
        $sheet->setCellValue('F' . $line, '');
        $sheet->setCellValue('G' . $line, '');
    }

    $line++;
    $sheet->mergeCells('A' . $line . ':G' . $line);
    $sheet->getRowDimension($line)->setRowHeight(6);
    $line++;
}

ob_end_clean();
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . '門店面單' . '.xls"');
header("Content-Disposition:attachment;filename=門店面單.xls"); //attachment新窗口打印inline本窗口打印
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');

以上是“PhpOffice怎么樣才能寫出一個漂亮的表格”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟连| 将乐县| 本溪市| 石棉县| 苍南县| 平南县| 鹤峰县| 屏山县| 炎陵县| 乌审旗| 孝感市| 西青区| 韶关市| 井陉县| 旌德县| 罗江县| 哈密市| 射阳县| 赤壁市| 玛纳斯县| 望江县| 鹤壁市| 阳西县| 托克逊县| 黄浦区| 东辽县| 祁门县| 望都县| 阳曲县| 府谷县| 荔浦县| 高青县| 南涧| 江北区| 博兴县| 新巴尔虎右旗| 喀喇沁旗| 合作市| 禄丰县| 昭平县| 侯马市|