用PHP读取大型excel文件
我想用PHPExcel1.7.3c读取一个17MB的excel文件(2003),但是在超过120秒的限制后,它已经在加载文件的时候崩溃了。 是否有另一个库可以更高效地执行此操作?我没有需要的样式,我只需要它来支持UTF8。 感谢您的帮助用PHP读取大型excel文件
使用PHPExcel时文件大小并不是一个好措施,更重要的是了解每个工作表中的单元格数(rowsxcolumns)。
如果你没有必要的造型,你叫:
$objReader->setReadDataOnly(true);
加载文件之前?
如果你不需要访问一个工作表中的所有工作表,或只有特定的细胞,看看使用
$objReader->setLoadSheetsOnly(array(1,2))
或
$objReader->setLoadSheetsOnly(1)
或定义readFilter
是你使用单元格缓存?如果是这样,有什么方法?这会减慢加载时间。
17MB是一个很大的文件。
1MB文件需要多长时间才能解析,因此您可以计算出17MB文件需要多长时间。然后一个选项可能只是增加120秒的限制。
或者,您可以导出到CSV,这将更有效,并通过PHP的fgetcsv导入。
也许你可以转换/导出为csv,并使用内置的fgetcsv()。取决于你需要什么样的功能。
如果您从读取唯一需要的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文件存储在内存中。这会变慢,但不会吃掉你所有服务器的内存!
在500美元的商业用途,我希望它会更好 – 2010-06-03 14:20:10
价格和质量没有关联。如果您想将它用于您自己的Web应用程序,则只需要99美元的个人许可证。 – Sjoerd 2010-06-04 07:06:20