我正在尝试使用PHPExcel1.7.3c读取一个17MB的Excel文件(2003版),但是在加载文件时就已经崩溃了,超过了我设定的120秒限制。有没有其他的库可以更高效地完成这个任务?我不需要样式,只需要支持UTF8。谢谢你的帮助。
我正在尝试使用PHPExcel1.7.3c读取一个17MB的Excel文件(2003版),但是在加载文件时就已经崩溃了,超过了我设定的120秒限制。有没有其他的库可以更高效地完成这个任务?我不需要样式,只需要支持UTF8。谢谢你的帮助。
在使用PHPExcel时,文件大小并不是一个很好的度量标准,更重要的是要了解每个工作表中单元格的数量(行数x列数)。
如果您不需要样式,那么您是否调用了:
$objReader->setReadDataOnly(true);
在加载文件之前需要执行哪些操作?
如果您不需要访问所有的工作表,或者只需要访问工作表内的某些单元格,请考虑使用
$objReader->setLoadSheetsOnly(array(1,2))
或者
$objReader->setLoadSheetsOnly(1)
或者定义一个readFilter
你是否正在使用单元格缓存?如果是,使用哪种方法?这会减慢加载时间。
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 文件所需的时间,以此来估算解析 17MB 文件所需的时间。然后你可以考虑增加你的 120 秒限制。
或者,你可以将文件导出为 CSV 格式,这样会更高效,并通过 PHP 的 fgetcsv 函数进行导入。
我听说Excel Explorer在读取大文件方面更好。
我目前正在使用电子表格阅读器(https://github.com/nuovo/spreadsheet-reader),它在读取XLSX
、ODS
和CSV
方面非常快,只有在读取XLS
格式时才会出现上述问题。