任何人都可以告诉我为什么PHPExcel不允许超过5000行。 我在我的项目中使用开源PHPExcel生成报告,我无法从Mysql-DB写入超过5000行的数据。执行查询时,我的结果集获取7230条记录。我该如何解决..
答案 0 :(得分:18)
几乎可以肯定这是超时或内存问题。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer时);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer时)。
确保始终启用错误日志记录...使用try / catch块来捕获任何PHPExcel异常。并阅读有关内存和性能的PHPExcel站点讨论主题。
答案 1 :(得分:9)
我遇到了同样的问题。您需要分配足够的时间和内存限制。
我在3个不同的服务器上测试了我的解决方案,结果如下:
约5000条记录(12列)
阅读文件:
09:48:22峰值内存使用量:1.25 MB
阅读数据:
09:48:31峰值内存使用量:54.5 MB
将数据索引到数组后:
09:48:35峰值内存使用量:68.5 MB
记录:4504
我将内存和时间增加到读取22.000记录后,索引达到370.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 - 输入错误!
答案 2 :(得分:3)
几乎可以肯定这是超时或内存问题。工作表大小的唯一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行的记录。
答案 3 :(得分:1)
如果没有你的代码或类的代码是相当困难的,我相信......你是说你不能在XLS文件或工作表中写入超过5k行?否则,一个丑陋的解决方法可能是在第一张表中写入5K行,其余在第二张表中写入(如果DB变大则每张表5K行)。 我不认为XLS有5k行的限制,所以你的脚本应该有错误或配置错误。你试过几次了吗?它总是打印5k行吗?或者可能是因为超时? (您的脚本或连接)
答案 4 :(得分:0)
此类问题很可能是服务器内存问题。您使用的是哪种类型的服务器,并且您确定它有足够的内存和资源来处理大型数据文件吗?如果你不能告诉任何一种方式,最好的解决方法是一次读入几千条记录,处理它们然后移动到下一个块。我本人更愿意将大数据文件分解为可管理的部分(文件),然后我可以随后处理这些部分以获得我想要的结果。处理好所有部分后,可以将它们合并在一起以生成新的大型数据文件。