PHP経由でインポートし、ファイル内の1つのシートだけをCSVに変換できるようにする必要があるExcelファイル(97-2003)があります。これらはユーザーによってアップロードされるため、手動で行うオプションはありません。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);