php使用PhpSpreadsheet導(dǎo)出Excel表格的實例詳解
PhpSpreadsheet介紹
1、簡介
PhpSpreadsheet 是一個用純PHP編寫的庫,提供了一組類,使您可以讀取和寫入不同的電子表格文件格式
PhpSpreadsheet 提供了豐富的API接口,可以設(shè)置諸多單元格以及文檔屬性,包括樣式、圖片、日期、函數(shù)等等諸多應(yīng)用,總之你想要什么樣的Excel表格,PhpSpreadsheet都能做到。
使用 PhpSpreadsheet 開發(fā)的PHP要求 7.1或更高版本
PhpSpreadsheet 支持鏈式操作
2、安裝
使用 composer 安裝,在項目根目錄下執(zhí)行下面命令,即可安裝。本次是在ThinkPHP5框架里使用。
composer require phpoffice/phpspreadsheet
使用
1、引用和實例化
use PhpOffice\PhpSpreadsheet\Spreadsheet; // 實例化 Spreadsheet 對象 $spreadsheet = new Spreadsheet();
2、獲取工作簿
getActiveSheet
// 獲取活動工作薄 $sheet = $spreadsheet->getActiveSheet();
單元格操作
1、獲取單元格
兩種獲取單元格方式
- getCell
- getCellByColumnAndRow 數(shù)字單元格坐標(biāo)獲取單元格
$cell = $sheet->getCell('A1'); $cell = $sheet->getCellByColumnAndRow(1,1); // 參數(shù):列、行
2、設(shè)置單元格的值
- setValue
- setCellValue
- setCellValueByColumnAndRow
// 獲取單元格 $cellA = $sheet->getCell('A1'); // 設(shè)置單元格值 $cellA->setValue('姓名'); // 設(shè)置A1單元格的值為姓名 // 給A1設(shè)置值,參數(shù):單元格位置,值 $sheet->setCellValue('A1','ID'); //給A2賦值 hello $sheet->setCellValueByColumnAndRow(1, 2, 'hello');
3、單元格文字樣式
- getStyle 獲取單元格樣式
- getFont 獲取單元格文字樣式
- setBold 設(shè)置文字粗細
- setName 設(shè)置文字字體
- setSize 設(shè)置文字大小
//將A1至D1單元格設(shè)置成粗體 $sheet->getStyle('A1:D1')->getFont()->setBold(true); //將A1單元格設(shè)置成粗體,黑體,10號字 $sheet->getStyle('A1')->getFont()->setBold(true)->setName('黑體')->setSize(10);
4、單元格文字顏色
- getColor() 獲取坐標(biāo)顏色
- setRGB() 設(shè)置字體顏色(顏色值帶#)
- getRGB() 獲取字體顏色
- setARGB() 設(shè)置字體顏色(顏色值不帶#)
- getARGB() 獲取字體顏色
// B3單元格設(shè)置顏色 $sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE'); $sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');
5、單元格內(nèi)文字換行
- setWrapText 設(shè)置文本里的\n符合為:換行
//使用 \n 進行單元格內(nèi)換行,相當(dāng)于 Alt+Enter $sheet->getCell('A1')->setValue("hello\nworld"); $sheet->getStyle('A1')->getAlignment()->setWrapText(true);
6、單元格列和行
- getColumnDimension 獲取一列
- getWidth 獲取一列的寬度
- setWidth 設(shè)置一列的寬度
- setAutoSize 設(shè)置一列的寬度自動調(diào)整
- getDefaultColumnDimension 獲取一列的默認值
//設(shè)置默認列寬20 $sheet->getDefaultColumnDimension()->setWidth(20); //將A列寬度設(shè)置成20 $sheet->getColumnDimension('A')->setWidth(20); //自動計算列寬 $sheet->getColumnDimension('A')->setAutoSize(true);
- getRowDimension 獲取一行
- getRowHeight 獲取一行的高度
- setRowHeight 設(shè)置一行的高度
//設(shè)置默認行高 $sheet->getDefaultRowDimension()->setRowHeight(20); //設(shè)置第一行行高為20pt $sheet->getRowDimension('1')->setRowHeight(20);
- getHighestColumn 獲取總列數(shù)
- getHighestRow 獲取總行數(shù)
echo $sheet->getHighestColumn(); echo $sheet->getHighestRow();
7、單元格樣式
- applyFromArray 設(shè)置單元格樣式
- 對齊
use PhpOffice\PhpSpreadsheet\Style\Alignment; // 居中對齊 $styleArray = [ 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中 'vertical' => Alignment::VERTICAL_CENTER, //垂直居中 ], ]; $worksheet->getStyle('A1')->applyFromArray($styleArray);
- 邊框
上 下 左 右 全部 邊框都可設(shè)置
//紅色邊框 use PhpOffice\PhpSpreadsheet\Style\Border; // 外邊框 // Border 類中的常量都是邊框樣式 // Border::BORDER_THICK 邊框樣式 $styleArray = [ 'borders' => [ 'outline' => [ 'borderStyle' => Border::BORDER_THICK, 'color' => ['argb' => 'FFFF0000'], ], ], ]; $worksheet->getStyle('B2:G8')->applyFromArray($styleArray);
8、單元格合并和拆分
- mergeCells 合并
- unmergeCells 拆分
// 合并A1到C1列 $sheet->mergeCells('A1:C4'); // 合并A1到A4行 $sheet->mergeCells('A1:A4'); // 合并后,賦值只能給A1,開始的坐標(biāo)。 $sheet->getCell('A1')->setValue('西安'); // 拆分 $sheet->mergeCells('A1:C4'); $sheet->unmergeCells('A1:A4');
9、超鏈接
- getHyperlink 獲取單元格鏈接
- setUrl 設(shè)置單元格鏈接
$spreadsheet->getActiveSheet()->setCellValue('E6', 'xxxx的博客'); $spreadsheet->getActiveSheet()->getCell('E6')->getHyperlink()->setUrl('https://blog.csdn.net/u011167662');
10、使用函數(shù)
SUM求和A;VERAGE平均數(shù);MIN最小值;MAX最大值
$sheet->setCellValue('A3', '=SUM(A1:A2)'); $sheet->setCellValue('A3', '=MAX(A1:A2)');
11、批量賦值
- fromArray 從數(shù)組中的值填充工作表
參數(shù)1:數(shù)據(jù)(數(shù)組)
參數(shù)2:去除某個值
參數(shù)3:從哪個位置開始
$sheet->fromArray( [ [1,'歐陽克','18歲','188cm'], [2,'黃蓉','17歲','165cm'], [3,'郭靖','21歲','180cm'] ], 3, 'A2' );
12、寫入圖片
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; //寫入圖片 $drawing = new Drawing(); $drawing->setName('Logo')->setDescription('Logo')->setPath('../files/1.jpg')->setHeight(30)->setCoordinates('D6')->setOffsetX(50)->setOffsetY(6); $drawing->setRotation(25); $drawing->getShadow()->setVisible(true); $drawing->getShadow()->setDirection(45); $drawing->setWorksheet($sheet);
工作簿操作
1、xlsx 文件導(dǎo)出
- IOFactory::createWriter 寫入到文件
use PhpOffice\PhpSpreadsheet\IOFactory; // MIME 協(xié)議,文件的類型,不設(shè)置,會默認html header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // MIME 協(xié)議的擴展 $filename = date('Y-m-d').'工作報告單'; header('Content-Disposition:attachment;filename='.$filename .'.xlsx'); // 緩存控制 header('Cache-Control:max-age=0'); $write = IOFactory::createWriter($spreadsheet, 'Xlsx'); $write->save('php://output');
2、xls 文件導(dǎo)出
// MIME 協(xié)議,文件的類型,不設(shè)置,會默認html header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // MIME 協(xié)議的擴展 $filename = date('Y-m-d').'工作報告單'; header('Content-Disposition:attachment;filename='.$filename .'.xls'); // 緩存控制 header('Cache-Control:max-age=0'); $write = IOFactory::createWriter($spreadsheet, 'Xls'); $write->save('php://output');
3、設(shè)置工作簿標(biāo)題
- setTitle
$sheet->setTitle('標(biāo)題1');
實戰(zhàn)
1、導(dǎo)出簡單數(shù)據(jù)(使用 ThinkPHP5 框架)
<?php namespace app\api\controller; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\IOFactory; class Excel { public function exporteasy() { $spreadsheet = new Spreadsheet(); $worksheet = $spreadsheet->getActiveSheet(); $title = 'Excel導(dǎo)出'; $worksheet->setTitle($title); $worksheet->mergeCells('B2:D2'); $worksheet->getRowDimension(1)->setRowHeight(50); $worksheet->getStyle('B2:D2')->applyFromArray([ 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, ], 'borders' => [ 'outline' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => ['argb' => '000000'] ], ], 'font' => [ 'name' => '黑體', 'bold' => true, 'size' => 22 ] ]); $worksheet->setCellValueByColumnAndRow(2, 2, $title); $worksheet->setCellValueByColumnAndRow(2, 3, '姓名'); $worksheet->setCellValueByColumnAndRow(3, 3, '性別'); $worksheet->setCellValueByColumnAndRow(4, 3, '年齡'); $worksheet->setCellValueByColumnAndRow(2, 4, '張三'); $worksheet->setCellValueByColumnAndRow(3, 4, '男'); $worksheet->setCellValueByColumnAndRow(4, 4, '20'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename=Excel導(dǎo)出.xlsx'); header('Cache-Control: max-age=0'); $write = IOFactory::createWriter($spreadsheet, 'Xlsx'); $write->save('php://output'); } }
導(dǎo)出表格截圖:
2、導(dǎo)出數(shù)據(jù)
liu_system_log 管理員操作記錄表
public function export() { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $styleArray = [ 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, ], 'borders' => [ 'outline' => [ 'borderStyle' => Border::BORDER_THICK, ], ], ]; $sheet->getDefaultColumnDimension()->setWidth(20);// 列寬 $sheet->getDefaultRowDimension()->setRowHeight(20);// 行高 // 標(biāo)題 $tabletitle = '管理員操作記錄表'; $sheet->mergeCells('A1:D1'); $sheet->getRowDimension('1')->setRowHeight(40);// 行高 $sheet->getStyle('A1')->applyFromArray($styleArray); $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16); $sheet->setCellValue('A1', $tabletitle); $sheet->getStyle('A2:D2')->applyFromArray($styleArray); $sheet->getStyle('A2:D2')->getFont()->setBold(true)->setSize(12); $sheet->setCellValue('A2','管理員姓名'); $sheet->setCellValue('B2','操作'); $sheet->setCellValue('C2','ip'); $sheet->setCellValue('D2','操作時間'); $data = Db::name('system_log')->select(); $sort = 0; foreach ($data as $v){ $sheet->setCellValue('A' . ($sort + 3), $v['admin_name']); $sheet->setCellValue('B' . ($sort + 3), $v['page']); $sheet->setCellValue('C' . ($sort + 3), $v['ip']); $sheet->setCellValue('D' . ($sort + 3), date('Y-m-d H:i:s', $v['add_time'])); $sort++; } // 工作簿標(biāo)題 $sheettitle = '管理員操作記錄表'; $sheet->setTitle($sheettitle); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // 文件名 $filename = '管理員操作記錄表'; header('Content-Disposition: attachment;filename=' . $filename .'.xlsx'); header('Cache-Control: max-age=0'); $write = IOFactory::createWriter($spreadsheet, 'Xlsx'); $write->save('php://output'); }
以上就是php使用PhpSpreadsheet導(dǎo)出Excel表格的實例詳解的詳細內(nèi)容,更多關(guān)于php PhpSpreadsheet導(dǎo)出Excel的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php中有關(guān)合并某一字段鍵值相同的數(shù)組合并的改進
這篇文章主要介紹了php中有關(guān)合并某一字段鍵值相同的數(shù)組合并的改進,需要的朋友可以參考下2015-03-03PHP下利用header()函數(shù)設(shè)置瀏覽器緩存的代碼
PHP高級應(yīng)用學(xué)習(xí)筆記之 利用header()函數(shù)設(shè)置瀏覽器緩存2010-09-09php urlencode()與urldecode()函數(shù)字符編碼原理詳解
中文字符編碼研究系列第五期,詳解 urlencode()與urldecode()函數(shù)字符編碼原理,兩個函數(shù)分別用于編碼 URL 字符串和解碼已編碼的 URL 字符串,實現(xiàn)對中文字符的編碼2011-12-12解決wincache不支持64位PHP5.5/5.6的問題(提供64位wincache下載)
這篇文章主要解決wincache不支持64位PHP5.5/5.6的問題,并提供64位wincache的下載,需要的朋友可以參考下。2016-06-06