任何人都可以告訴我爲什麼PHPExcel不允許超過5000行。 我在項目中使用開源PHPExcel生成報表,並且我無法從Mysql-DB中編寫超過5000行的數據。執行查詢時,我的結果集獲取7230記錄。我如何修復它..爲什麼PHPExcel不允許寫超過5000行
回答
幾乎肯定這是一個超時或內存問題。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer時);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer時)。
確保始終啓用錯誤日誌記錄...使用try/catch塊來捕獲任何PHPExcel異常。並閱讀關於內存和性能的PHPExcel網站討論主題。
沒有你的代碼或類的代碼是相當困難的,我相信......你的意思是你不能在XLS文件或工作表中寫入超過5k行?否則,一個醜陋的解決方法可能是在第一張紙上寫5K行,其餘的在第二張(如果數據庫變大,則每張紙5K行)。 我不認爲XLS有5k行的限制,所以應該有一些錯誤或在您的腳本配置錯誤..你嘗試了幾次?它總是打印5k行嗎?或者它可能是由於超時? (您的腳本或連接)
此類問題很可能是服務器內存問題。你在什麼類型的服務器上,你確定它有足夠的內存和資源來處理大型數據文件嗎?如果你不能說明,最好的解決方法是一次讀入幾千條記錄,處理它們,然後移動到下一個塊。我自己寧願將大數據文件分解成可管理的部分(文件),然後我可以處理每個部分以獲得我想要的結果。一旦處理完所有片段,就可以將它們合併在一起,以創建新的大型數據文件。
我有同樣的問題。您需要分配足夠的時間和內存限制。
我過我這裏3個不同的服務器上的解決方案是結果:
關於5000條記錄(12列)
讀文件:
9點48分22秒峯值內存使用量:1.25 MB
讀取數據:
9時48分31秒峯值內存使用情況:54.5 MB
索引數據到一個數組後:
9點48分35秒峯值內存使用量:68.5 MB
記錄:4504
我增加了內存和時間索引它上升到370後讀22.000記錄。00MB
這裏是解決方案(報錯,說一切是在代碼序列正確) ,你叫PHPExcel在你的程序/功能:
ini_set("max_execution_time", 'time_limit'); //see manual
是否所有的初始化使這裏所有的對象都準備好然後讀取文件和索引數據到程序內部結構分配內存:
ini_set('memory_limit', '???'); //your memory limit as string
$excel = $excelReader->load($filePath);
"Memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB"
//do the rest of the structure!
一個好主意是由數據的某些類別已管理這一切,這樣你就不會遇到400 MB - 容易出錯!
ini_set('memory_limit','-1');單獨傾向於解決這個問題 – maxhud 2015-08-04 17:35:42
幾乎肯定這是一個超時或內存問題。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer時);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer時)。
您可以更改此行
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
爲
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
然後允許寫入記錄超過65536行。
- 1. 爲什麼CalendarProvider不允許寫入ExtendedProperties?
- 2. %爲什麼不允許
- 3. 在Java中,爲什麼ResultSet不允許您運行next()超過1次?
- 4. 爲什麼C#允許重寫異步?
- 5. 不能導出超過5000行到Excel?
- 6. 爲什麼移位超過允許位仍然有效?
- 7. 爲什麼我的正則表達式允許超過1
- 8. 爲什麼ruby方法在末尾不允許超過一個參數
- 9. 爲什麼java允許NPE
- 10. 爲什麼樣式表列不允許?
- 11. 爲什麼Java不允許以
- 12. 爲什麼System.out.println(super)不允許?
- 13. 爲什麼變量不允許綁定
- 14. 爲什麼不允許密碼驗證?
- 15. 爲什麼我的XMLHttpRequest不允許XSS?
- 16. 爲什麼不允許我調試
- 17. 爲什麼IDBKeyRange.only()不允許布爾值?
- 18. 爲什麼PHP不允許比較?
- 19. 爲什麼a,b = 1不允許?
- 20. 爲什麼C++不允許使用typeof?
- 21. 爲什麼sfinae如果constexpr不允許?
- 22. 爲什麼Java不允許在Enum中重寫equals(Object)?
- 23. 爲什麼xsjs不允許小寫的表名?
- 24. GameObject不允許超過一個孩子
- 25. 階梯不允許通過它的路徑 - 爲什麼?
- 26. 爲什麼不允許在投影中放置過濾器
- 27. 允許裝箱的空值,那麼爲什麼拆箱不被允許?
- 28. 爲什麼Python的queue.Queue.get()允許從超時提前返回?
- 29. 該指數超出允許範圍。爲什麼?
- 30. 爲什麼函數[-A1,...,+ B]不允許任何超類型作爲參數?
你能夠檢索到5000行嗎?如果是這樣的話,PHPExcel可能會有一些限制,你最好在CodePlex的支持論壇上提問 - 我總是發現對PHPExcel的支持非常好。如果沒有,那可能是服務器的內存/超時問題。 – user183037 2011-02-04 07:21:50