PHPExcel加载函数内存不足

时间:2013-10-22 12:22:36

标签: php memory phpexcel

当我使用此功能时:

$objPHPExcel = PHPExcel_IOFactory::load($fileName);

在较小的excel文件上,它需要一段时间,但最终得到一个广泛的数组输出到$ objPHPExcel ...不幸的是,当我在一个稍微大一点的更复杂的Ecel文件上尝试时,我得到了:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)

该文件是一个xlsm文件,大小为1.7MB ...这听起来是对还是有些可疑?

我认为这是您需要的所有代码。我正在本地运行默认的WAMP设置。

2 个答案:

答案 0 :(得分:4)

我有同样的问题。在我们公司,我们需要将巨大的xls(x)文件导入我们的数据库。我们一直在使用PEAR Spreadsheet Excel Reader,但它不再受支持,我们遇到了很多新文件的错误,所以我们尝试切换到PHPExcel。 不幸的是,我们没有设法克服内存限制问题。我们花了很多时间试图。 使用PHPExcel,您无法使用高达'BB'的列加载100K行。

这不是工作的正确工具。 PHP Excel将整个电子表格作为对象构建在内存中。没有办法解决这个问题。

您需要的是一个可以逐行读取文件的工具。

我们的解决方案是将Java和Apache POI类与事件模型一起使用 - 它只执行只读操作,但内存和CPU效率非常高。

如果您只需要支持基于xml的“Office Open XML”格式(xlsx)而不支持基于旧的OLE,那么您可以将其作为XML进行处理。如果你进入它,格式并没有那么复杂。只需解压缩文件并查看xmls即可。你有一个文件是字符串表,一个文件有每个工作表的行和单元格。 您应首先解析字符串表,然后使用xml reader(而不是DOM)解析表数据。

据我所知,截至2013年10月,没有可以开箱即用的PHP库。

祝你好运。

答案 1 :(得分:2)

根据我的经验,PHPExcel在大量操作期间内存不足。

您可以尝试提高脚本的内存限制。

ini_set('memory_limit','256M');