带有多个选项卡的PHPExcel大型数据集 – 内存耗尽

使用PHPExcel我可以单独运行每个选项卡并获得我想要的结果但是如果我将它们全部添加到一个excel中它只是停止,没有错误或任何事情.

每个标签包含大约60到8万条记录,我有大约15到20个标签.因此大约有1600000条记录分成多个标签(这个数字也可能会增长).

我还使用.xlsx扩展测试了.xls的65000行限制,如果我运行每个选项卡它自己的excel文件没有问题.

伪代码:

从db读取数据
启动PHPExcel进程
解析每个页面的数据(一些样式/格式但不多)
(使用公式SUM将每个数字字段值汇总到Excel的底部的总计列中)
保存excel(xlsx格式)

我有3GB的RAM所以这不是一个问题,脚本设置为执行没有超时.

我在许多项目中使用过PHPExcel并且取得了很好的效果但是拥有如此庞大的数据集似乎是一个问题.

每个人都有这个问题?解决?提示?等等…

更新:

在错误日志—内存耗尽

除了在盒子中添加更多内存之外,我还能做其他任何提示吗?

每个人都保存当前状态和编辑excel与新数据?

解决方法:

我有完全相同的问题,谷歌搜索没有找到有价值的解决方案.

由于PHPExcel生成对象并将所有数据存储在内存中,在最终生成本身也存储在内存中的文档文件之前,在PHP中设置更高的内存限制永远不会完全解决此问题 – 该解决方案不能很好地扩展.

要真正解决问题,您需要“动态”生成XLS文件.多数民众赞成我做了什么,现在我可以肯定,无论数据库返回多少(百万)行,“将SQL结果集下载为XLS”都能正常工作.

可惜的是,我找不到任何具有“驱动”XLS(X)生成功能的库.

我在IBM Developer Works上发现了这篇文章,它提供了一个关于如何“即时”生成XLS XML的示例:
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/#N101FC

对我来说效果很好 – 我有多张数据表,有很多数据,甚至没有触及PHP内存限制.很好地扩展.

请注意,此示例使用Excel纯XML格式(文件扩展名为“xml”),因此您可以将未压缩的数据直接发送到浏览器.
http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats#Excel_XML_Spreadsheet_example

如果你真的需要生成XLSX,事情会变得更加复杂. XLSX是包含多个XML文件的压缩存档.为此,您必须将所有数据写入磁盘(或内存 – 与PHPExcel相同的问题),然后使用该数据创建存档.
http://en.wikipedia.org/wiki/Office_Open_XML

可能它还可以“动态”生成压缩档案,但这种方法似乎非常复杂.

上一篇:PHP导出巨大的excel文件


下一篇:如何使用PHPExcel更改单元格值而不更改单元格的样式?