8

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

4

5 回答 5

24

几乎可以肯定这是超时或内存问题。工作表大小的唯一 PHPExcel 限制是 65,536 行和 256 (IV) 列(使用 Excel5 编写器时);或 1,048,576 行和 16,384 (XFD) 列(使用 Excel2007 Writer 时)。

确保始终启用错误日志记录...使用 try/catch 块来捕获任何 PHPExcel 异常。并阅读有关内存和性能的 PHPExcel 站点讨论线程。

于 2011-02-04T08:56:26.047 回答
10

我有同样的问题。您将需要分配足够的时间和内存限制。

我已经在 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 - 容易出错!

于 2011-05-25T09:21:20.500 回答
5

几乎可以肯定这是超时或内存问题。工作表大小的唯一 PHPExcel 限制是 65,536 行和 256 (IV) 列(使用 Excel5 编写器时);或 1,048,576 行和 16,384 (XFD) 列(使用 Excel2007 Writer 时)。

您可以更改此行

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

作为

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

然后它允许写入超过 65536 行的记录。

于 2014-07-24T10:01:46.017 回答
1

我相信没有你的代码或类的代码是相当困难的......你的意思是你不能在 XLS 文件或工作表中写入超过 5k 行?否则,一个丑陋的解决方法可能是在第一张表中写入 5K 行,在第二张表中写入其余行(因此,如果 DB 变大,则每张表中写入 5K 行)。我不认为 XLS 有 5k 行的限制,所以你的脚本应该有问题或配置错误。你试过几次了吗?它总是打印 5k 行吗?或者可能是由于超时?(你的脚本或连接)

于 2011-02-04T07:12:02.517 回答
0

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

于 2011-02-04T07:18:15.803 回答