phpexcel文件是一款開源的php表格操作插件,只要用到excel數據導入導出的朋友大多數人都選擇此款插件了,但在使用中也會有問題出現,下面來看問題分析研究。
PHPExcel是PHP中功能最強大的導入、導出、操作Microsoft Excel的開源項目。但是它體系復雜,有時會讓人難以掌控。
PHPExcel導出Excel表的使用方法網上已經很多了,本文就不贅述。不過,在使用過程中,我卻發現了一個莫名其妙的問題:那就是使用PHPExcel自動導出excel的文件有時候能夠正常導出並打開,有時候生成的excel文件卻無法打開,Excel2007提示“發現無法讀取的內容”。
使用文本編輯器打開生成的Excel文件,發現一行提示“Fatal error: Call to a member function setValue() on a non-object in PHPExcel/Calculation/FormulaParser.php on line 431”。
經過仔細而又痛苦的檢查發現,原來是因為在寫入單元格的文本值中,有些值以等號開頭,例如“====中國青年報...”,結果PHPExcel在寫入這個單元格的時候,將其判定為公式,於是調用公式解析器去計算相應的值,但是又無法正確進行計算(因為本來就不是公式嘛),所以就導致生成的excel文件無法打開。
解決辦法非常簡單,
就是在往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中的設置,請根據自己服務器的情況量力而行。