使用PHPExcel導入導出excel格式文件

使用PHPExcel導入導出excel格式文件 
作者:zccst 

由於導出使用較多,下面是導出實現過程。 

第一步,將PHPExcel的源代碼複製到項目的lib下 

文件包括:PHPExcel.php 和 文件夾PHPExcel 
源代碼見附件 

注1:源代碼是zip格式,能在windows和linux通用。 
注2:PHPExcel.zip是乾淨代碼,可以直接引用。PHPExcel2.zip有svn記錄,不適合直接引用。 

第二步:在需要導出的handler頁面中引用 

1,在頭部引入三個文件 
Php代碼  收藏代碼
  1. //設置環境變量(新增PHPExcel)  
  2. set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR . get_include_path());  
  3. //注:在yii中,也可以直接Yii::import(“application.lib.PHPExcel.*”);  
  4.   
  5. //引入PHPExcel相關文件  
  6. require_once "PHPExcel.php";  
  7. require_once 'PHPExcel/IOFactory.php';  
  8. require_once 'PHPExcel/Writer/Excel5.php';  


2,將數據放入excel表格中 
Php代碼  收藏代碼
  1. //新建  
  2. $resultPHPExcel = new PHPExcel();  
  3.   
  4. //設置參數  
  5.   
  6. //設值  
  7. $resultPHPExcel->getActiveSheet()->setCellValue('A1''季度');  
  8. $resultPHPExcel->getActiveSheet()->setCellValue('B1''名稱');  
  9. $resultPHPExcel->getActiveSheet()->setCellValue('C1''數量');  
  10. $i = 2;  
  11. foreach($data as $item){  
  12.     $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i$item['quarter']);  
  13.     $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i$item['name']);  
  14.     $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i$item['number']);  
  15.     $i ++;  
  16. }  


3,設置導出的一些參數 
版本一: 
Php代碼  收藏代碼
  1. //設置導出文件名  
  2. $outputFileName = 'total.xls';  
  3. $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel);  
  4. //ob_start();  ob_flush();  
  5. header("Content-Type: application/force-download");  
  6. header("Content-Type: application/octet-stream");  
  7. header("Content-Type: application/download");  
  8. header('Content-Disposition:inline;filename="'.$outputFileName.'"');  
  9. header("Content-Transfer-Encoding: binary");  
  10. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
  11. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
  12. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");  
  13. header("Pragma: no-cache");  
  14.   
  15. $xlsWriter->save( "php://output" );  


版本二: 
Php代碼  收藏代碼
  1. $writer = PHPExcel_IOFactory::createWriter($resultPHPExcel'Excel5');  
  2. $writer->setTempDir(Yii::app()->basePath.'/runtime');  
  3. $filename = "單.xls";  
  4. header("Pragma: public");  
  5. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");  
  6. header("Content-Type: application/force-download");  
  7. header('Content-Type: application/vnd.ms-excel');  
  8. header('Content-Disposition: attachment;filename="' . $filename . '"');  
  9. header('Cache-Control: max-age=0');  
  10. $writer->save('php://output');  


4,增加附件(非必需) 
Php代碼  收藏代碼
  1. $objPHPExcel    = new PHPExcel();  
  2. $objReader = PHPExcel_IOFactory::createReader('Excel5');  
  3. $objReader->setReadDataOnly(true);  
  4.   
  5. foreach($data2 as $item){  
  6.     $fp = dirname(__FILE__) . "/../../../" . $item['file_path'] ;  
  7.     $objPHPExcel = $objReader->load($fp);  
  8.     $objWorksheet = $objPHPExcel->getActiveSheet();  
  9.     $resultPHPExcel->addExternalSheet($objWorksheet);  
  10. }  



高級主題 
1,excel5與excel2007區別 
zipArchive.php 
有很多php(php.ini)不支持excel2007,所以建議使用excel5。 


2,設置臨時文件位置 
如果報臨時文件名錯,則更改臨時文件路徑 
xlsWriter.setDirName(Yii::app()->basePath.'/runtime'); 


3,設置excel單元格的格式 
過濾 

4,輸出有錯。 
默認$xlsWriter->save( "php://output" );可能因爲緩存不夠大,而顯示不完整,所以做箇中轉,方式如下: 
Php代碼  收藏代碼
  1. $finalFileName = (Yii::app()->basePath.'/runtime/'.time().'.xls';  
  2. $xlsWriter->save($finalFileName);  
  3. echo file_get_contents($finalFileName);  //file_get_contents() 函數把整個文件讀入一個字符串中。和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章