【发布时间】:2015-09-04 11:52:46
【问题描述】:
我有一个 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 不适合这项工作,我最好使用什么?
编辑 - 这是 Mark 建议后的工作代码
$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);
【问题讨论】:
-
您是否尝试过使用 PHP 的 Cell Caching 来减少其内存使用量?
-
干杯@MarkBaker,效果很好!不确定您是否要将其发布为正确答案,我会将其标记为已回答?
标签: php memory optimization phpexcel