這篇文章主要介紹PhpOffice怎么樣才能寫(xiě)出一個(gè)漂亮的表格,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司專注于克州企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開(kāi)發(fā)。克州網(wǎng)站建設(shè)公司,為克州等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站開(kāi)發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)確定總共有多少列,需要確定表頭要合并多少單元格,可以多預(yù)留 1~2 列,如果用不到,最后把寬度設(shè)置為 0
剩下的就是合并單元格,設(shè)置單元格樣式
注意,里面列出來(lái)的有些是方法名,有些是類屬性,并且只列出來(lái)了本文中使用的屬性,具體還要去看看相應(yīng)的類文件
Speadsheet // 實(shí)例化 excel Sheet // 當(dāng)前活動(dòng) sheet PhpOffice\PhpSpreadsheet\Worksheet\Worksheet getColumnDimension // 操作列 width // 設(shè)置列寬 autoSize // 自動(dòng)大小 getRowDimension // 操作行 height // 設(shè)置行高 getCell // 獲取要操作的單元格(An:Gn),如 (A2:G7) style 同Speadsheet 下的 Style setValue // 設(shè)置值 mergeCell // 合并單元格 pageSetup // 頁(yè)面設(shè)置,包含紙張大小,比如 A4 ... pageMargins // 頁(yè)邊距 ... headerFooter // 頁(yè)眉頁(yè)腳 ... ... Style // 處理樣式 PhpOffice\PhpSpreadsheet\Style\Style Font // 處理字體 size // 字體大小 bold // 加粗 underline // 下劃線 color // 處理顏色 argb // 帶透明度顏色 rgb // 顏色 Fill // 處理填充 fillType // 填充方式 startColor // 開(kāi)始顏色(不清楚用處) endColor // 結(jié)束顏色(不清楚用處) color // 處理顏色 argb // 帶透明度顏色 背景色帶透明 rgb // 顏色 背景色 Borders Alignment NumberFormat Protection
之后的例子,將使用下面的變量
$spreadsheet = new Spreadsheet(); // 實(shí)例化 excel 操作類,默認(rèn)初始化 sheet 序號(hào)為 0 $sheet = $spreadsheet->getActiveSheet(0); // 拿到要操作的 sheet,必須是已存在的 // 獲取操作表格樣式的類(全局樣式) $defaultStyle = $spreadsheet->getDefaultStyle(); // PhpOffice\PhpSpreadsheet\Style\Style 實(shí)例
// 獲取操作對(duì)齊方式 類 $align = $defaultStyle->getAlignment(); // 設(shè)置 Horizontal(水平) 和 Vertical(垂直) 都居中,一個(gè)類中的方法,可以連貫操作 $align->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER) // 僅水平居中 $align->setHorizontal(Alignment::HORIZONTAL_CENTER); // 僅垂直居中 $align->setVertical(Alignment::VERTICAL_CENTER);
// 獲取操作對(duì)齊方式 類 $border = $defaultStyle->getBorders(); // 設(shè)置底部邊框 $border->getBottom()->setBorderStyle(Border::BORDER_THIN)
// 獲取字體操作類 $font = $defaultStyle->getFont() // 設(shè)置字體 18, 加粗,加下劃線 $font->setSize(18)->setBold(true)->setUnderline(Font::UNDERLINE_SINGLE); // 操作顏色,需要先獲取顏色操作 類 $font->getColor()->setRGB('333333');
$column = $sheet->getColumnDimension('A') // 設(shè)置列寬 $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(); // 獲取活動(dòng) sheet $sheet = $spreadsheet->getActiveSheet(0); // 設(shè)置表格全部上下居中 $defaultStyle = $spreadsheet->getDefaultStyle(); $defaultStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER); $defaultStyle->getFont()->getColor()->setRGB('333333'); // 設(shè)置列寬 $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); // 預(yù)留列 $sheet->getColumnDimension('G')->setWidth(14); $line = 1; // 大標(biāo)題 // 合并單元格 $sheet->mergeCells('A'. $line .':G'. $line); // 合并單元格 $sheet->getRowDimension($line)->setRowHeight(40); // 設(shè)置行高 $ATitle = $sheet->getCell('A' . $line); // 獲取單元格 $ATitle->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // 內(nèi)容水平居中 $ATitle->getStyle('A' . $line)->getFont()->setSize(22)->setBold(true); // 字體大小,加粗 $ATitle->setValue('Smallnews - 門店訂單'); $line ++; // 店長(zhǎng)信息 $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); // 內(nèi)容水平居左 $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 ++; // 運(yùn)單統(tǒng)計(jì) $sheet->mergeCells('A' . $line . ':B' . $line); // AB 合并 $sheet->getRowDimension($line)->setRowHeight(40); // 設(shè)置行高 $ATotalOrder = $sheet->getCell('A' . $line); $ATotalOrder->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT)->setVertical(Alignment::VERTICAL_BOTTOM); // 內(nèi)容水平居左,垂直居下 $ATotalOrder->getStyle('A' . $line)->getFont()->setSize(12); $ATotalOrder->setValue('訂單數(shù)量: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); // 內(nèi)容水平居左,垂直居下 $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); // 內(nèi)容水平居左,垂直居下 $ESend->getStyle('E' . $line)->getFont()->setSize(12); $ESend->setValue('發(fā)貨時(shí)間:' . date('Y-m-d')); $line ++; // 增加一個(gè)空行,充當(dāng)上下內(nèi)容的 margin $sheet->mergeCells('A' . $line . ':G' . $line); $sheet->getRowDimension($line)->setRowHeight(6); $line ++; // 模擬訂單數(shù)據(jù) $orders = [ ['items' => [ ['goods_title' => '這是個(gè)名字很長(zhǎng)的商品,真的很長(zhǎng), 不信你看,肯定超過(guò)了表格寬度'], ['goods_title' => '這是個(gè)名字比較短的商品'], ]], ['items' => [ ['goods_title' => '轉(zhuǎn)向 衛(wèi)衣秋季潮牌新款寬松時(shí)尚套頭紫橘色橙色短款連帽衛(wèi)衣女'], ['goods_title' => '芙清醫(yī)美面膜醫(yī)用男女淡化痘印抗菌敷料水光針術(shù)后修復(fù)皮炎祛痘'], ['goods_title' => '經(jīng)典麻辣鍋底'], ]] ]; // 訂單數(shù)據(jù) foreach ($orders as $order) { // 購(gòu)買信息 $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); // 模擬用戶數(shù)據(jù) $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 件,實(shí)付 200 元'); $line++; // 增加一個(gè)空行,充當(dāng)上下內(nèi)容的 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); // 根據(jù)商品數(shù)量, 設(shè)置區(qū)域的邊框 $sheet->setCellValue('A' . $line, '序號(hào)'); $sheet->setCellValue('B' . $line, '商品名稱'); $sheet->setCellValue('C' . $line, '單價(jià)'); $sheet->setCellValue('D' . $line, '優(yōu)惠'); $sheet->setCellValue('E' . $line, '數(shù)量'); $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怎么樣才能寫(xiě)出一個(gè)漂亮的表格”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!