我正在尝试使用PHPExcel1.7.3c读取一个17MB的excel文件(2003),但是在超过120秒的限制后,它在加载文件时已经崩溃了。 是否有其他库可以更有效地完成它?我不需要造型,我只需要它来支持UTF8。 谢谢你的帮助
答案 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),它在阅读XLSX
,ODS
和CSV
方面非常快,并且只有阅读XLS
格式。