使用phpExcel類導出excel文件相關問題總結

使用phpExcel類導出excel文件相關問題總結 php

Autor:xiaoqingtime:2011-04-22 app

總結一下最近使用phpexcel類導出excel 文件時遇到的問題,主要包括三大類: 函數

  1.導出時提示找不到文件怎麼辦? post

  2.導出excel時中文出現亂碼的問題。 測試

  3.導出數據量大時,提示內存超過最大值或者運行時間超時的問題。 字體

先看下phpexcel經常使用的方法總結(摘錄自zeal_blog:http://www.zeali.net/entry/556 大數據

  1. <?     
  2.   
  3. /**   
  4.  
  5.  * 若是使用 Excel5 ,輸出的內容應該是GBK編碼。  
  6.  
  7.  */    
  8.   
  9. require_once 'PHPExcel.php';     
  10.   
  11. //require_once 'PHPExcel/Writer/Excel5.php';    // 用於其餘低版本xls    
  12.   
  13. //require_once 'PHPExcel/Writer/Excel2007.php'; // 用於 excel-2007 格式    
  14.   
  15. $table = new PHPExcel();    
  16.   
  17. //設置當前的sheet索引,用於後續的內容操做。    
  18.   
  19. //通常只有在使用多個sheet的時候才須要顯示調用。    
  20.   
  21. //缺省狀況下,PHPExcel會自動建立第一個sheet被設置SheetIndex=0    
  22.   
  23. $table->setActiveSheetIndex(0);    
  24.   
  25. //設置當前活動sheet的名稱    
  26.   
  27. $table->setActiveSheetIndex(0)->setTitle('test_title');    
  28.   
  29. $ohjActSheet=$table->setActiveSheetIndex(0);    
  30.   
  31. //設置單元格內容    
  32.   
  33. //由PHPExcel根據傳入內容自動判斷單元格內容類型    
  34.   
  35. $objActSheet->setCellValue('A1''字符串內容');  // 字符串內容    
  36.   
  37. $objActSheet->setCellValue('A2', 26);            // 數值    
  38.   
  39. $objActSheet->setCellValue('A3', true);          // 布爾值    
  40.   
  41. $objActSheet->setCellValue('A4''=SUM(A2:A2)'); // 公式    
  42.   
  43. //顯式指定內容類型    
  44.   
  45. $objActSheet->setCellValueExplicit('A5''847475847857487584',     
  46.   
  47.  PHPExcel_Cell_DataType::TYPE_STRING);    
  48.   
  49. //合併單元格    
  50.   
  51. $objActSheet->mergeCells('B1:C22');    
  52.   
  53. //分離單元格    
  54.   
  55. $objActSheet->unmergeCells('B1:C22');    
  56.   
  57. //設置單元格樣式    
  58.   
  59. $objActSheet->getColumnDimension('B')->setAutoSize(true);    
  60.   
  61. $objActSheet->getColumnDimension('A')->setWidth(30);    
  62.   
  63. $objStyleA5 = $objActSheet->getStyle('A5');  
  64.   
  65. //設置字體    
  66.   
  67. $objFontA5 = $objStyleA5->getFont();    
  68.   
  69. $objFontA5->setName('Courier New');    
  70.   
  71. $objFontA5->setSize(10);    
  72.   
  73. $objFontA5->setBold(true);    
  74.   
  75. $objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);    
  76.   
  77. $objFontA5->getColor()->setARGB('FF999999');      
  78.   
  79. //設置對齊方式    
  80.   
  81. $objAlignA5 = $objStyleA5->getAlignment();    
  82.   
  83. $objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //水平   
  84.   
  85. $objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  //垂直  
  86.   
  87. //設置邊框    
  88.   
  89. $objBorderA5 = $objStyleA5->getBorders();    
  90.   
  91. $objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);    
  92.   
  93. $objBorderA5->getTop()->getColor()->setARGB('FFFF0000'); // color    
  94.   
  95. $objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);    
  96.   
  97. $objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);    
  98.   
  99. $objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);    
  100.   
  101.    
  102.   
  103. //添加一個新的worksheet    
  104.   
  105. $table->createSheet();    
  106.   
  107. $table->getSheet(1)->setTitle('測試2');    
  108.   
  109. //保護單元格    
  110.   
  111. $table->getSheet(1)->getProtection()->setSheet(true);    
  112.   
  113. $table->getSheet(1)->protectCells('A1:C22''PHPExcel');    
  114.   
  115. //$objWriter->save($outputFileName);    
  116.   
  117. //header("Content-Type: application/octet-stream");    
  118.   
  119. //header('Content-Disposition:inline;filename="'.$outputFileName.'"');    
  120.   
  121. //header("Cache-Control: must-revalidate, post-check=0, pre-check=0");    
  122.   
  123. //header("Pragma: no-cache");    
  124.   
  125. //$objWriter->save('php://output');    
  126.   
  127. ?>   


使用時常見的問題總結: ui

1.關於提示找不到文件的問題: 編碼

緣由可能有:緩衝區沒有打開或者mb_overlod_func函數沒有關閉,解決這個問題的最好辦法是把php.inidisplay_errors打開,下載文件,打開後會提示相應錯誤信息。如果後者,則須要打開php.ini文件,找到mbsrtring.func_overload=7將其隱掉。 spa

若能正常導出excel可是沒有數據,則通常是程序錯誤(沒有取到數據或數據沒賦值)

2.導出excel時出現亂碼的問題,這個問題網上的答案不少。主要的解決方案有:

  (1).亂碼緣由:客戶使用的中文版Windows系統平臺,而Windows平臺的文件名編碼爲  gb2312(gbk),而咱們網頁編碼爲了跟進現存潮流 通常都採用utf-8(國際化)編碼,這時當咱們:header("Content-Disposition: inline; filename=\"" . $filename . ".xls-:special:1:-")時就會出現亂碼,假如你的網頁編碼就是gb2312那就不用考慮編碼問題了(不然轉碼了反而會出現亂碼)

  解決辦法:對$filename轉碼,執行:iconv('utf-8", "gb2312", $filename)。假如你的環境不支持iconv函數能夠換別的函數,只要能將$filename的編碼轉爲gbk就行。

(2):輸出文件的時候加上相應的頭信息:

Header('content-Type:application/vnd.ms-excel;charset=utf-8');

(3).若是以上方法仍是出現亂碼,則多是輸出緩衝區中有其餘多餘的內容,在php文件中設置excel內容之間清理一下輸出緩衝區吧:<php ob_clean();>

以上三步基本能夠涵蓋到多數excel亂碼的問題。

3.導出大數據時提示錯誤

打開php.ini文件中的display_errors,查看具體錯誤信息:通常狀況下有兩類:

(1).runtime 超過了maxium time,這個時候可能的緣由是文件中出現了死循環或者大循環。檢查源碼看是否有死循環。建議不要在循環體中設置excel格式,佔據的時間超多。經初步測試,在循環體中設置3-4個格式,則大約1500條數據時就會出現運行超時的問題。所以儘可能把設置格式的代碼放置到循環體外。若是還有問題,則有兩種方法:修改ini文件,把time_limit=0;遠程不能修改ini文件則須要在程序中添加set_time_limit(0);

(2).memory size of ....bytes exhausted這是典型的內存不夠用的狀況。如能夠修改php.ini文件則找到memory_limit = 32M將其改成memory_limit = 64M或者更大128M.如是遠程不能修改php.ini文件,則須要在代碼中修改:@ini_set('memory_limit','128M');

相關文章
相關標籤/搜索