推薦:《PHP影片教學》
#文章不長,文章不長,文章不長
本表格是模仿橘心優選
團長面單來做的
先上表格
想法
- 確定總共有多少列,需要確定表頭要合併多少單元格,可以多預留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如何寫一張漂亮的表格的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境