2011-02-04 65 views
8

任何人都可以告訴我爲什麼PHPExcel不允許超過5000行。 我在項目中使用開源PHPExcel生成報表,並且我無法從Mysql-DB中編寫超過5000行的數據。執行查詢時,我的結果集獲取7230記錄。我如何修復它..爲什麼PHPExcel不允許寫超過5000行

+0

你能夠檢索到5000行嗎?如果是這樣的話,PHPExcel可能會有一些限制,你最好在CodePlex的支持論壇上提問 - 我總是發現對PHPExcel的支持非常好。如果沒有,那可能是服務器的內存/超時問題。 – user183037 2011-02-04 07:21:50

回答

15

幾乎肯定這是一個超時或內存問題。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer時);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer時)。

確保始終啓用錯誤日誌記錄...使用try/catch塊來捕獲任何PHPExcel異常。並閱讀關於內存和性能的PHPExcel網站討論主題。

1

沒有你的代碼或類的代碼是相當困難的,我相信......你的意思是你不能在XLS文件或工作表中寫入超過5k行?否則,一個醜陋的解決方法可能是在第一張紙上寫5K行,其餘的在第二張(如果數據庫變大,則每張紙5K行)。 我不認爲XLS有5k行的限制,所以應該有一些錯誤或在您的腳本配置錯誤..你嘗試了幾次?它總是打印5k行嗎?或者它可能是由於超時? (您的腳本或連接)

0

此類問題很可能是服務器內存問題。你在什麼類型的服務器上,你確定它有足夠的內存和資源來處理大型數據文件嗎?如果你不能說明,最好的解決方法是一次讀入幾千條記錄,處理它們,然後移動到下一個塊。我自己寧願將大數據文件分解成可管理的部分(文件),然後我可以處理每個部分以獲得我想要的結果。一旦處理完所有片段,就可以將它們合併在一起,以創建新的大型數據文件。

9

我有同樣的問題。您需要分配足夠的時間和內存限制。

我過我這裏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 - 容易出錯!

+0

ini_set('memory_limit','-1');單獨傾向於解決這個問題 – maxhud 2015-08-04 17:35:42

2

幾乎肯定這是一個超時或內存問題。工作表大小的唯一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行。