網頁 (PHP) 產生 Excel 方法
- 直接把網頁的 Table 表格轉成 .xls 檔案 Export Html Table To Excel Spreadsheet using jQuery – table2excel 。優點快速,缺點開啟時會出現警告,商業應用不適合,公司內部湊合用
- 產書真正的 Excel ,使用本文使用 PHPExcel 套件可以讀取或產生原生 Excel 格式檔案。優點標準,缺點很麻煩
—
PHPExcel
使用 PHP 處理 Excel 格式檔案
—
讀取 Excel 檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php require_once WEB_ROOT .'/Component_Back/PHPExcel-1.8.1/Classes/PHPExcel/IOFactory.php'; // 讓PHPExcel決定使用哪種格式讀取Excel $excel= \PHPExcel_IOFactory::load($_FILES['File']['tmp_name']); // 抓取第一個Sheet $sheet = $excel->getSheet(0); // 讀出資料變成陣列 $rowData = $sheet->toArray(); // 資料筆數 $Count = count($rowData); for ($i = 1; $i<$Count; $i++) { // 顯示 A 欄資料 echo $rowData[$i][0]; $j++; } |
—
產生 Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
require_once( OS_PATH .'/Component_Back/PHPExcel_1.8.0/Classes/PHPExcel.php' ); $objPHPExcel= new PHPExcel(); // A1 儲存格填入 123 $objPHPExcel->getActiveSheet()->setCellValue('A1', 123); // B1 填入字串 $objPHPExcel->getActiveSheet()->setCellValue('B1', 'Test value'); // C1 儲存格設定小數點兩位百分比格式 $objPHPExcel->getActiveSheet()->getStyle('C1')->getNumberFormat()->setFormatCode('0.00%'); // 寫入儲存 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save( sys_get_temp_dir() .'/Report.xls' ); |
儲存格格式 PHPExcel_Style_NumberFormat
範例 2 – 直接輸出下載檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php require_once WEB_ROOT .'/Component_Back/PHPExcel-1.8.1/Classes/PHPExcel/IOFactory.php'; // $objPHPExcel = new \PHPExcel(); //實體化Excel $objPHPExcel->setActiveSheetIndex(0); //設定預設顯示的工作表 $objActSheet = $objPHPExcel->getActiveSheet(); //指定預設工作表為 $objActSheet $objActSheet->setTitle("wwww"); //設定標題 //$objPHPExcel->createSheet(); //建立新的工作表,上面那三行再來一次,編號要改 // $objActSheet->setCellValue('A1', 'xx'); $objActSheet->setCellValue('B1', 'yyy'); $objActSheet->setCellValue('C1', 'zzz'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename='. $Filename .'aaa.xls'); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); |
—
Fatal error: Allowed memory size
在寫入大量資料時,出現了 Fatal error: Allowed memory size 的錯誤
1 2 3 4 5 6 |
<?php set_time_limit(0); ini_set("memory_limit", -1); // $objPHPExcel = new \PHPExcel(); //實體化Excel |
無效方案
1 2 3 4 |
// 記憶體控制 $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; $cacheSettings = array( 'memoryCacheSize' => '1MB'); \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); |
—
指定欄位格式
1 |
$objActSheet->setCellValueExplicit('A'.$i, $row['Name'], \PHPExcel_Cell_DataType::TYPE_STRING); |
要注意 setCellValue 修改成 setCellValueExplicit
—
Fatal error: Class ‘XMLWriter’ not found
補一個 php-xml 就好了
1 |
yum install php-xml |
—
1,969 total views, 1 views today