使用PHP读取大型Excel文件

7

我正在尝试使用PHPExcel1.7.3c读取一个17MB的Excel文件(2003版),但是在加载文件时就已经崩溃了,超过了我设定的120秒限制。有没有其他的库可以更高效地完成这个任务?我不需要样式,只需要支持UTF8。谢谢你的帮助。

6个回答

10

在使用PHPExcel时,文件大小并不是一个很好的度量标准,更重要的是要了解每个工作表中单元格的数量(行数x列数)。

如果您不需要样式,那么您是否调用了:

$objReader->setReadDataOnly(true);

在加载文件之前需要执行哪些操作?

如果您不需要访问所有的工作表,或者只需要访问工作表内的某些单元格,请考虑使用

$objReader->setLoadSheetsOnly(array(1,2))

或者

$objReader->setLoadSheetsOnly(1)

或者定义一个readFilter

你是否正在使用单元格缓存?如果是,使用哪种方法?这会减慢加载时间。


2
如果你只需要 Excel 文件中的数据,以下是读取大型 Excel 文件的方法:
我在服务器上安装了 gnumeric(例如 debian/ubuntu): apt-get install gnumeric
然后,使用 PHP 读取 Excel 文件并将其存储到二维数据数组中非常简单(数组维度为行和列):
system("ssconvert \"$excel_file_name\" \"temp.csv\"");
$array = array_map("str_getcsv", file("temp.csv"));

然后我就可以对数组进行任何我想做的操作。这个过程对于一个10MB大小的xls文件只需要不到10秒的时间,和我在我最喜欢的电子表格软件中加载文件所需的时间相同!

对于非常大的文件,您应该使用fopen()和file_getcsv()函数,并在不使用file()函数将整个CSV文件存储在内存中的情况下完成所需的操作,以避免占用服务器全部内存。 这样做会更慢,但不会耗尽您的服务器内存!


1

17MB 是一个相当大的文件。

计算一下解析 1MB 文件所需的时间,以此来估算解析 17MB 文件所需的时间。然后你可以考虑增加你的 120 秒限制。

或者,你可以将文件导出为 CSV 格式,这样会更高效,并通过 PHP 的 fgetcsv 函数进行导入。


1

2
以商业用途为500美元,我希望它会更好。 - Mark Baker
价格和质量没有关联。如果您只想将其用于自己的 Web 应用程序,则只需要一张 99 美元的个人许可证。 - Sjoerd

0
也许你可以将其转换/导出为csv格式,然后使用内置的fgetcsv()函数。这取决于你需要什么样的功能。

0

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