phpexcelを使用してxlsxファイルを作成しています。
メモリが不足していることを除いて、正常に動作しています。
これは、同じファイルに2枚のシートを書き込んでいるためです。どちらも15,000行以上です。
私がやりたいのは
単一のシートを作成し、それをファイルに保存するか、スペースをあまりとらないようにどこかでサニタイズします。
次のシートを作成します。
出力を処理します。
これを行う方法はありますか?
基本的:
while(... have sheet 1 data...) {
build sheet 1
}
while(... have sheet 2 data...) {
build sheet 2
}
それ以外の
while (... have data...) {
add to sheet 1
add to sheet 2
}
スプレッドシート全体をメモリに保持できない場合は、メモリ制限を増やす必要があります。私の知る限り、PHPExcel やその他のスプレッドシート作成ライブラリは、メモリに収まるものだけで、ディスク上の表現では機能しません。
PHPExcel は「メモリ内」スプレッドシートとして説明されており、PHP のメモリ制限によって制約されていますが、セル キャッシュを使用することで必要なメモリを減らすことができます。この手法は、開発者向けドキュメント (セクション 4.2.1) で詳しく説明されており、メモリ内のセル オブジェクトを圧縮したり、セル データを APC、Wincache、memcache などのメモリ キャッシュやディスクにキャッシュしたりするように構成できます。速度は犠牲になりますが、メモリ使用量を最大 60% 削減できます。セル キャッシュを使用すると、メモリ不足になることなく、同じワークブックに両方のワークシートを作成できる場合があります。
2 つのワークシートを含む 1 つのワークブックではなく、それぞれが 1 つのワークシートを含む 2 つのワークブックを作成する場合は、最初のワークブックを保存したら、2 番目のワークシートの作成を開始する前に、最初のワークブックをメモリからフラッシュする必要があります...そうしないと、メモリをほとんど節約できません。ワークブック オブジェクト内の循環参照のため、PHPExcel オブジェクトの設定を解除する前にこれらを解除する必要があります。これは、開発者向けドキュメントのセクション 4.3 で説明されています。