2

当我使用此功能时:

$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。

4

2 回答 2

4

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

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

您需要的是一个可以逐行、逐个单元格地读取文件的工具。

我们的解决方案是使用带有事件模型的 Java 和Apache POI类——它执行只读操作,但内存和 CPU 效率很高。

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

据我所知,截至 2013 年 10 月,还没有 PHP 库可以直接导入大型 excel 文件。

祝你好运。

于 2013-10-22T13:41:53.560 回答
2

根据我的经验,PHPExcel 在很多操作过程中都会耗尽内存。

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

ini_set('memory_limit','256M');
于 2013-10-22T12:29:14.067 回答