2010-06-03 143 views
5

我想用PHPExcel1.7.3c读取一个17MB的excel文件(2003),但是在超过120秒的限制后,它已经在加载文件的时候崩溃了。 是否有另一个库可以更高效地执行此操作?我没有需要的样式,我只需要它来支持UTF8。 感谢您的帮助用PHP读取大型excel文件

回答

8

使用PHPExcel时文件大小并不是一个好措施,更重要的是了解每个工作表中的单元格数(rowsxcolumns)。

如果你没有必要的造型,你叫:

$objReader->setReadDataOnly(true); 

加载文件之前?

如果你不需要访问一个工作表中的所有工作表,或只有特定的细胞,看看使用

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

$objReader->setLoadSheetsOnly(1) 

或定义readFilter

是你使用单元格缓存?如果是这样,有什么方法?这会减慢加载时间。

1

17MB是一个很大的文件。

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

或者,您可以导出到CSV,这将更有效,并通过PHP的fgetcsv导入。

1

我听说Excel Explorer在阅读大文件时效果更好。

+2

在500美元的商业用途,我希望它会更好 – 2010-06-03 14:20:10

+0

价格和质量没有关联。如果您想将它用于您自己的Web应用程序,则只需要99美元的个人许可证。 – Sjoerd 2010-06-04 07:06:20

0

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

2

如果您从读取唯一需要的Excel文件是数据,这里是我的方式来读取庞大的Excel文件:

我在我的服务器上安装gnumeric,即在Debian/Ubuntu的: 的apt-get安装Gnumeric的

那么php调用读我的excel文件,并将其存储到两个dimensionnal数据阵列非常简单(尺寸行列数):

system("ssconvert \"$excel_file_name\" \"temp.csv\""); 
$array = array_map("str_getcsv", file("temp.csv")); 

然后,我可以做我想做我的阵列。对于一个10MB的大型xls文件,这需要不到10秒的时间,同时我需要将这个文件加载到我最喜欢的电子表格软件中。对于非常大的文件,您应该使用fopen()和file_getcsv()函数,并且在不将数据存储在巨大数组中的情况下执行您必须做的操作,以避免使用file()函数将整个csv文件存储在内存中。这会变慢,但不会吃掉你所有服务器的内存!