PHPExcel:打开文件需要很长时间

时间:2014-03-27 17:38:27

标签: phpexcel

我正在使用PHPExcel读取各种大小的Excel电子表格,然后将单元格数据导入数据库。阅读电子表格本身效果很好而且非常快,但我注意到实际加载/打开PHPExcel文件的时间可能需要10-20秒(文件越大,所需时间越长 - - 特别是如果电子表格大小> 1MB)。

这是我在迭代之前用来加载文件的代码:

$filetype = PHPExcel_IOFactory::identify($file);
$objReader = PHPExcel_IOFactory::createReader($filetype);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($file);

如何才能更快地加载文件?令人沮丧的是,导入数据的最大延迟就是最初打开文件。

谢谢!

2 个答案:

答案 0 :(得分:2)

我在Ruby和Excel库中看到过这种相同的行为:打开一个大文件需要花费大量时间,其中大的是> 500KB。

我认为原因有两点:

1)xlsx文件是zip压缩的,因此必须首先进行解压缩

2)xlsx文件是一系列XML文件,必须解析所有这些文件。

#1可能很小,但与#2相比,它很可能会相形见绌。我相信它的XML解析是真正的罪魁祸首。此外,XML解析器是一个基于DOM的解析器,因此必须解析整个XML DOM并将其加载到内存中。

我认为你无法做任何事情来加快这个速度。一个大的xlsx文件包含许多必须解析并加载到内存中的XML。

答案 1 :(得分:1)

实际上,你可以做些什么。大多数XML解析器的问题是它们首先将整个文档加载到内存中。对于大型文档,这需要相当长的时间。

避免这种情况的一种方法是使用允许流式传输的解析器。因此,您只需加载所需的部分,而不是将所有XML文件内容加载到内存中。这样,你几乎可以在内存中一次只有一行。这是超快速和内存效率。

如果您感到好奇,可以在此处找到使用此技术的库示例:https://github.com/box/spout