在開發模組時如果要吧資料表內容匯出excel,最常用的套件因該就是PHPExcel,但是官網已經說明PHPExcel套件因升級不易只能支援到php5.6,該物件已於2017年正式棄用,並於2019年永久歸檔,換句話說PHPExcel套件對於日後新版的excel格式均不支援,為保持程式在最新狀態只好棄用PHPExcel改使用PhpSpreadsheet電子表格套件,該套件也是能匯出excel,還能匯出LibreOffice Calc,感覺還不錯!
唯一比較麻煩的是使用PhpSpreadsheet要先佈署composer,如果沒佈署composer是沒辦法使用的,還好官方有釋出已經設定好的phpoffice套件可以直接引入使用,省了很多麻煩,使用PhpSpreadsheet方法如下:
1、先下載PhpSpreadsheet套件,我已經幫大家吧phpoffice一起打包上傳
https://drive.google.com/file/d/1jw73diWVjbcr1ycY-gtqM2cGfpLp1zS_/view?usp=sharing
下載回來後解壓縮吧phpoffice跟PhpSpreadsheet丟到Xoops模組的class資料夾中,未來如需更新PhpSpreadsheet可到官網下載最新版覆蓋即可
https://github.com/PHPOffice/PhpSpreadsheet
2、然後建立一個excel.php放在模組根目錄中
以下為編排excel表格常用的函數設定
include_once "header.php";
//先引入autoload.php檔
include_once XOOPS_ROOT_PATH.'/modules/模組ID/class/phpoffice/vendor/autoload.php';use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = new Spreadsheet(); //實體化Excel工作表
//設置電子表格元數據的操作:
$spreadsheet->getProperties()
->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription(
"Test document for Office 2007 XLSX, generated using PHP classes."
)
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
//設置工作簿的默認樣式(字形/文字大小)
$spreadsheet->getDefaultStyle()->getFont()->setName('Microsoft JhengHei');
$spreadsheet->getDefaultStyle()->getFont()->setSize(12);
//欄位寬度
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
//自動欄寬
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$setARGBPrefix='00';
//儲存格背景顏色
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB("".$setARGBPrefix."848484");
//文字顏色
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(false)->getColor()->setARGB("".$setARGBPrefix."FFFFFF");
//文字置中
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
//合併儲存格
$spreadsheet->getActiveSheet()->mergeCells('A4:D4');
$spreadsheet->setActiveSheetIndex(0);
$worksheet = $spreadsheet->getActiveSheet();
//工作表標題
$worksheet->setTitle('Another sheet');
//表頭區
$worksheet
->setCellValue('A1', 'Product')
->setCellValue('B1', 'Quantity')
->setCellValue('C1', 'Unit Price')
->setCellValue('D1', 'Price');
//內容區,可改由資料表迴圈讀出內容
$spreadsheet->getActiveSheet()
->setCellValue('A2', 'test1')
->setCellValue('B2', 'test2')
->setCellValue('C2', 'test3')
->setCellValue('D2', 'test4');
$spreadsheet->getActiveSheet()
->setCellValue('A3', 'test1')
->setCellValue('B3', 'test2')
->setCellValue('C3', 'test3')
->setCellValue('D3', 'test4');
$spreadsheet->getActiveSheet()
->setCellValue('A4', 'test1test1test1test1test1');
->setCellValue('A2', 'test1')
->setCellValue('B2', 'test2')
->setCellValue('C2', 'test3')
->setCellValue('D2', 'test4');
$spreadsheet->getActiveSheet()
->setCellValue('A3', 'test1')
->setCellValue('B3', 'test2')
->setCellValue('C3', 'test3')
->setCellValue('D3', 'test4');
$spreadsheet->getActiveSheet()
->setCellValue('A4', 'test1test1test1test1test1');
//下載區
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test.xls"'); //檔案名稱
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');
//為了防止內存泄露用完手動清理
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
其他排版參數設定請參考PhpSpreadsheet官網說明
這樣就OK了,來下載excel檔測試看看。
各項排版設定參數都有正常,這樣只需要吧內容區改為資料表迴圈表頭文字改一下,就能匯出Xoops模組資料了,有需要的朋友參考看看!
工作心得撰寫:徐嘉裕 Neil hsu
留言
張貼留言