大きな XLSX ファイルをロードするときにメモリの枯渇を防ぐために PHPExcel を最適化するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-19 13:58:02
オリジナル
469 人が閲覧しました

How Can I Optimize PHPExcel to Prevent Memory Exhaustion When Loading Large XLSX Files?

大きなスプレッドシートをロードすると PHPExcel がメモリを過負荷にする

1024MB の RAM が割り当てられているにもかかわらず、PHPExcel は 3MB XSLX ファイルをロードするときにメモリ不足に陥ります。根本的な原因は、大規模なスプレッドシートの表示に伴うメモリを大量に使用するプロセスにあります。

PHPExcel のメモリ使用量の最適化

この問題に対処するには、次のようないくつかの最適化手法を使用できます。

選択したシートのロード

特定のワークシートのみをロードする必要がある場合は、setLoadSheetsOnly() を使用して、リーダーによって読み取られるシートの数を制限します。

$objReader->setLoadSheetsOnly([
    'Data Sheet #1',
    'Data Sheet #3'
]);
ログイン後にコピー

読み取りフィルター

特定のセルまたは行のみを取得するには、読み取りフィルターを使用できます。

class MyReadFilter implements PHPExcel_Reader_IReadFilter {
    // ... implementation
}

$objReader->setReadFilter(new MyReadFilter());
ログイン後にコピー

チャンキング

大きなスプレッドシートをチャンクで読み取ると、データの一部を読み込むだけでメモリ フットプリントを最小限に抑えることができます。

$chunkSize = 20;
$chunkFilter = new chunkReadFilter();

for ($startRow = 2; $startRow < 65536; $startRow += $chunkSize) {
    $chunkFilter->setRows($startRow, $chunkSize);
    $objPHPExcel = $objReader->load($inputFileName);
}
ログイン後にコピー

データの読み取りのみ

readDataOnly を true に設定すると、データをフォーマットせずにセル値のみが読み込まれ、メモリ使用量が削減されます。

$objReader->setReadDataOnly(true);
ログイン後にコピー

セル キャッシュ

セル キャッシュはセル オブジェクトを圧縮形式で保存し、メモリ消費量を大幅に削減しますが、速度は犠牲になります。

代替方法

イテレータを使用して手動で配列を構築する代わりに、PHPExcel の toArray の使用を検討してください。 () または rangeToArray() メソッドで配列を効率的に生成します。

以上が大きな XLSX ファイルをロードするときにメモリの枯渇を防ぐために PHPExcel を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート