在PHP中读取非常大(超过100MB)的Excel文件

10

我试图使用 PHPExcel 读取一个大于100MB的Excel文件,但是加载文件时它崩溃了。我不需要任何样式。我尝试使用:

$objReader->setReadDataOnly(true);

但它仍然崩溃。

是否有有效的方法在PHP中读取这么大的Excel文件?


你经常需要这么做吗?尝试在CLI中运行... - ka_lin
@matanco 这个链接是关于 CSV 文件的,我说的是 Excel 文件。 - Husnain Ali
@KA_lin 我需要读取并插入数据库记录。我可以使用CLI完成吗? - Husnain Ali
当然可以,但只有在不经常上传和生成统计数据的情况下才可以(例如用户上传和生成统计数据并不推荐)。 - ka_lin
你有检查日志看看是超时错误还是内存不足吗?你有在文档中了解单元格缓存吗? - Mark Baker
显示剩余2条评论
2个回答

14

尝试使用Spouthttps://github.com/box/spout

这是一个用于解决问题(读写大文件)的PHP库。以下是它的工作原理:

其他库将电子表格的表示保存在内存中,这使它们容易出现内存不足错误。使用一些缓存策略可以帮助解决这些错误,但会严重影响性能。

另一方面,Spout使用流来读取或写入数据。这意味着始终只保留一个行在内存中,所有读取/写入的行都从内存中释放。这允许快速读写任何大小的数据集!试试吧 :)


1
我使用Spout。它很快。这里有一个例子:http://teknosains.com/php/read-big-excel-file-using-php-spout-library - jsdev

1

Spout刚刚节省了我的时间!我无法使用PhpOffice/PhPSpreedSheet读取一个大文件,出现了许多致命错误的内存大小问题,但是使用Spout却像魔法一样运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接