在使用PHPExcel導出Excel時出現的幾個錯誤的解決辦法

 PHPExcel是PHP中功能最強大的導入、導出、操作Microsoft Excel的開源項目。但是它體系複雜,有時會讓人難以掌控。
由於Microsoft Office是商業軟件,因此在Office2003及之前的版本,微軟的文檔格式是不公開的。這導致別的Office辦公軟件處於極其被動的地位,因為他們再怎麼努力,也很難完全兼容被普遍使用的Microsoft Office Word、Microsoft Office PowerPoint、Microsoft Office Excel等軟件。在Microsoft Office 2007版推出以後,微軟採用了XML作為這些文檔的底層存儲方式,並且努力推廣Office2007所採用Open Office XML(OOXML)成為國際文檔格式標準。雖然中國投了反對票,但是最終在今年4月初,ISO通過快速通道投票確認微軟提出的OOXML因大多數成員認可而成為國際文檔格式標準。
但是,OOXML文檔格式標準“規格極其複雜,設計完全落伍”(“中國自由軟件界元老”之稱的宮敏博士之語),仍然很難被其它軟件所掌控。從這個意義上來說,PHPExcel真的是一款非常牛的開源軟件了。它能夠從PHP中導出各種版本的Excel文檔(包括Excel2007格式的文檔),並且支持一定程度的複雜格式。
不過言歸正傳,由於PHPExcel為了去產生Microsoft Office的文檔,因此可能在導出Excel的時候會出一些奇怪的錯誤。如果你發現使用PHPExcel導出的Excel表無法用MS Excel打開,可以嘗試使用文本文檔或者是EditPlus打開導出的Excel文件,看看是否有提示何種錯誤。以下是兩種錯誤的解決辦法:
(1)Fatal error: Maximum execution time of 30 seconds exceeded解決錯誤方法
需要修改php.ini文件,如果是使用Ubuntu 9.04 Server的服務器,可以在/etc/php5/apache2/下找到php.ini文件,如果是Freebsd,可以在/usr/local/lib/下找到php.ini文件。使用sudo權限編輯下面的語句:
將如下語句:
max_execution_time = 30
修改為:
max_execution_time = 300
也就是將PHP腳本最長執行時間從30秒延長到300秒。
然後重啟一下Apache服務器,如果是Ubuntu Server的服務器,可以使用如下命令:
sudo /etc/init.d/apache2 restart
(2)Fatal error: Allowed memory size of 16777216 bytes exhausted 的解決辦法
一樣地需要修改php.ini文件:
將如下語句:
memory_limit = 16M
修改為:
memory_limit = 512M
也就是將PHP腳本所能夠申請的內存從16M擴大到512M。具體數字可以根據自己的需要確定。
一樣需要重啟Apache服務器。
需要注意的是:
(1)以上的修改可能存在一定風險,例如給​​服務器造成過大的負擔。所以請再三確認是否有必要給PHPExcel或者是其他PHP程序開放更大的內存空間以及更長的執行時間。
(2)修改完php.ini之後,只有重啟Apache之後,新的設置才會生效。
(3)php.ini中的設置,請根據自己服務器的情況量力而行。

沒有留言:

張貼留言