用PHP读取大型excel文件

时间:2010-06-03 13:36:42

标签: php excel performance large-files import-from-excel

我正在尝试使用PHPExcel1.7.3c读取一个17MB的excel文件(2003),但是在超过120秒的限制后,它在加载文件时已经崩溃了。 是否有其他库可以更有效地完成它?我不需要造型,我只需要它来支持UTF8。 谢谢你的帮助

6 个答案:

答案 0 :(得分:8)

使用PHPExcel时,Filesize不是一个好的衡量标准,了解每个工作表中的单元格数(rowsxcolumns)更为重要。

如果您不需要造型,请致电:

$objReader->setReadDataOnly(true);

加载文件之前?

如果您不需要访问所有工作表,或仅访问工作表中的某些单元格,请查看使用

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

$objReader->setLoadSheetsOnly(1)

或定义readFilter

您使用的是细胞缓存吗?如果是这样,有什么方法?这会减慢加载时间。

答案 1 :(得分: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()函数并执行您必须执行的操作而不将数据存储在一个巨大的数组中,以避免将整个csv文件存储在内存中的文件()功能。这会慢一些,但不会占用你服务器的所有内存!

答案 2 :(得分:1)

17MB是一个沉重的文件。

解析1MB文件解析所需的时间,以便计算17MB文件需要多长时间。然后一个选项可能只是增加你的120秒限制。

或者,你可以导出到CSV,效率更高,并通过PHP的fgetcsv导入。

答案 3 :(得分:1)

我听说Excel Explorer更适合阅读大文件。

答案 4 :(得分:0)

也许你可以转换/导出到csv,并使用内置的fgetcsv()。取决于您需要什么样的功能。

答案 5 :(得分:0)

我目前正在使用电子表格阅读器(https://github.com/nuovo/spreadsheet-reader),它在阅读XLSXODSCSV方面非常快,并且只有阅读XLS格式。