作者:zccst
由於導出使用較多,下面是導出實現過程。
第一步,將PHPExcel的源代碼複製到項目的lib下
文件包括:PHPExcel.php 和 文件夾PHPExcel
源代碼見附件
注1:源代碼是zip格式,能在windows和linux通用。
注2:PHPExcel.zip是乾淨代碼,可以直接引用。PHPExcel2.zip有svn記錄,不適合直接引用。
第二步:在需要導出的handler頁面中引用
1,在頭部引入三個文件
- //設置環境變量(新增PHPExcel)
- set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR . get_include_path());
- //注:在yii中,也可以直接Yii::import(“application.lib.PHPExcel.*”);
- //引入PHPExcel相關文件
- require_once "PHPExcel.php";
- require_once 'PHPExcel/IOFactory.php';
- require_once 'PHPExcel/Writer/Excel5.php';
2,將數據放入excel表格中
- //新建
- $resultPHPExcel = new PHPExcel();
- //設置參數
- //設值
- $resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度');
- $resultPHPExcel->getActiveSheet()->setCellValue('B1', '名稱');
- $resultPHPExcel->getActiveSheet()->setCellValue('C1', '數量');
- $i = 2;
- foreach($data as $item){
- $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['quarter']);
- $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']);
- $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['number']);
- $i ++;
- }
3,設置導出的一些參數
版本一:
- //設置導出文件名
- $outputFileName = 'total.xls';
- $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel);
- //ob_start(); ob_flush();
- header("Content-Type: application/force-download");
- header("Content-Type: application/octet-stream");
- header("Content-Type: application/download");
- header('Content-Disposition:inline;filename="'.$outputFileName.'"');
- header("Content-Transfer-Encoding: binary");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
- header("Pragma: no-cache");
- $xlsWriter->save( "php://output" );
版本二:
- $writer = PHPExcel_IOFactory::createWriter($resultPHPExcel, 'Excel5');
- $writer->setTempDir(Yii::app()->basePath.'/runtime');
- $filename = "單.xls";
- header("Pragma: public");
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
- header("Content-Type: application/force-download");
- header('Content-Type: application/vnd.ms-excel');
- header('Content-Disposition: attachment;filename="' . $filename . '"');
- header('Cache-Control: max-age=0');
- $writer->save('php://output');
4,增加附件(非必需)
- $objPHPExcel = new PHPExcel();
- $objReader = PHPExcel_IOFactory::createReader('Excel5');
- $objReader->setReadDataOnly(true);
- foreach($data2 as $item){
- $fp = dirname(__FILE__) . "/../../../" . $item['file_path'] ;
- $objPHPExcel = $objReader->load($fp);
- $objWorksheet = $objPHPExcel->getActiveSheet();
- $resultPHPExcel->addExternalSheet($objWorksheet);
- }
高級主題
1,excel5與excel2007區別
zipArchive.php
有很多php(php.ini)不支持excel2007,所以建議使用excel5。
2,設置臨時文件位置
如果報臨時文件名錯,則更改臨時文件路徑
xlsWriter.setDirName(Yii::app()->basePath.'/runtime');
3,設置excel單元格的格式
過濾
4,輸出有錯。
默認$xlsWriter->save( "php://output" );可能因爲緩存不夠大,而顯示不完整,所以做箇中轉,方式如下:
- $finalFileName = (Yii::app()->basePath.'/runtime/'.time().'.xls';
- $xlsWriter->save($finalFileName);
- echo file_get_contents($finalFileName); //file_get_contents() 函數把整個文件讀入一個字符串中。和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。