为什么PHPExcel不允许写超过5000行

时间:2011-02-04 06:36:43

标签: php phpexcel

任何人都可以告诉我为什么PHPExcel不允许超过5000行。 我在我的项目中使用开源PHPExcel生成报告,我无法从Mysql-DB写入超过5000行的数据。执行查询时,我的结果集获取7230条记录。我该如何解决..

5 个答案:

答案 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)

此类问题很可能是服务器内存问题。您使用的是哪种类型的服务器,并且您确定它有足够的内存和资源来处理大型数据文件吗?如果你不能告诉任何一种方式,最好的解决方法是一次读入几千条记录,处理它们然后移动到下一个块。我本人更愿意将大数据文件分解为可管理的部分(文件),然后我可以随后处理这些部分以获得我想要的结果。处理好所有部分后,可以将它们合并在一起以生成新的大型数据文件。