--
如果想偷吃步可以把 HTML 存成 .xls 檔案就可以使用 Excel 軟體開啟,缺點是開啟會出現警告。要標準的 Excel 可以使用 PHPExcel 來處理
--
讀取 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 |
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'); |
--
設定儲存格樣式
1 |
$objActSheet->setCellValue('A2')->getStyle('A2')->getFont()->getColor()->setRGB('FF0000'); |
那個 getStyle('A2') 不可以省略
--
工作表樣式
1 2 3 4 5 6 7 |
$writeExcel = new \PHPExcel(); $writeExcel->setActiveSheetIndex(0); //設定預設顯示的工作表 $writeExcel->getDefaultStyle()->applyFromArray(array( 'font' => array( 'size' => 14, 'name' => '正黑體', ))); |
--
Fatal error: Allowed memory size
在寫入大量資料時,出現了 Fatal error: Allowed memory size 的錯誤,請使用 ajax 技術來產出檔案:XMLHttpRequest - 非同步上傳檔案及下載
--
指定欄位格式
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 2 3 4 5 |
<?php require_once __DIR__ . '/3rdParty/PHPExcel-1.8.1/Classes/PHPExcel/IOFactory.php'; $objPHPExcel = @\PHPExcel_IOFactory::load('/tmp/aaaa.xlsx'); $sheetData = $objPHPExcel->getSheet(0)->toArray(); // $sheetData[0][0] |
$sheetData 就是第一個工作表的資料陣列
--
紙張設定
A3, 橫
1 2 |
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A3); |
--
跨頁重複標題
1 |
$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1,1); |
--
自動欄寬
1 2 3 4 |
$sheet = $objPHPExcel->getActiveSheet(); $sheet->getColumnDimension('A')->setAutoSize(true); $sheet->getColumnDimension('B')->setAutoSize(true); $sheet->getColumnDimension('C')->setAutoSize(true); |
迴圈
1 2 3 4 |
foreach(range('A','C') as $columnID) { $objPHPExcel->getActiveSheet()->getColumnDimension($columnID) ->setAutoSize(true); } |
--
設定字體大小、列高
- PHPExcel: Setting font size?
- PHPExcel How to apply styles and set cell width and cell height to cell generated dynamically
1 2 3 |
$objPHPExcel->getActiveSheet()->setCellValue('A1', '抄表紀錄'); $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16); $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(24); |
--
頁碼
1 2 |
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setDifferentOddEven(false); $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&P / &N'); |
--
'ZipArchive' not found
使用 Excel2007 格式,因為需要壓縮成 zip ,所以會遇到找不到 ZipArchive 錯誤
1 |
# apt-get install php-zip |
--
9,129 total views, 3 views today