用PHP读取大型的excel文件

我试图用PHPExcel1.7.3c读取一个17MB的excel文件(2003),但是在超过120秒的限制后,它已经在加载文件的时候崩溃了。 有另一个图书馆可以更有效地做到这一点吗? 我没有需要的样式,我只需要它支持UTF8。 谢谢你的帮助

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

如果你不需要造型,你打电话给:

$objReader->setReadDataOnly(true); 

在加载文件之前?

如果您不需要访问工作表中的所有工作表或单个特定单元格,请查看使用方法

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

要么

 $objReader->setLoadSheetsOnly(1) 

或者定义一个readFilter

你在使用单元格caching吗? 如果是这样,有什么方法? 这减慢了加载时间。

如果您只需要从您的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文件存储在内存中。 这会变慢,但不会吃掉你所有的服务器的内存!

17MB是一个很大的文件。

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

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

我听说Excel Explorer在阅读大文件上更好。

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

我目前正在使用电子表格阅读器( https://github.com/nuovo/spreadsheet-reader ),它在阅读XLSXODSCSV速度很快,而且在阅读XLS格式时遇到了问题。