我有一个 Excel 文件 (97-2003),我需要能够通过 PHP 导入该文件,并将文件中的一张表转换为 CSV。这些是由用户上传的,因此没有手动操作的选项。它需要与PHP一起使用。
我目前正在使用 PHPExcel,它工作正常,直到我们得到一个超过 33,000 行的文件......这给出了一个致命的 PHP 错误:Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 97 bytes) in [pathtophpexcel]\PHPExcel\Worksheet.php on line 11231
有什么方法可以进一步优化它,还是 PHPExcel 在处理大表时不适合使用?我使用的代码相当简单,所以不确定是否可以进一步优化它,但手指交叉!这是我正在使用的代码:
$reader = PHPExcel_IOFactory::createReader('Excel5');
$reader->setReadDataOnly(true);
$reader->setLoadSheetsOnly('Details');
$excel = $reader->load($filename);
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->save($filename_fixed);
如果 PHPExcel 不适合这项工作,我最好使用什么?
编辑 - 这是马克建议后的工作代码
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '2GB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$reader = PHPExcel_IOFactory::createReader('Excel5');
$reader->setReadDataOnly(true);
$reader->setLoadSheetsOnly('Details');
$excel = $reader->load($filename);
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->save($filename_fixed);