使用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) 大數據
使用時常見的問題總結: ui
1.關於提示找不到文件的問題: 編碼
緣由可能有:緩衝區沒有打開或者mb_overlod_func函數沒有關閉,解決這個問題的最好辦法是把php.ini中display_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');