1

PHPEXCEL メモリの問題に関しては多くのことが文書化されているため、私の質問では、Mark Ba​​ker が説明したように、「チャンク」での読み取りが適用されていると想定しています。私の特定の状況は次のとおりです。-
データベースレコードにアップロードされた「生の」スプレッドシートを読み取ります(正常に動作します)
-そのスプレッドシートを取得し、PHPExcelで開き、セルを監査し
ます-行と列を読み取り、条件を探します。
- セルに [informational|warning|error] がある場合 (a) 条件付き書式を適用し、セルのメモを挿入します (正常に動作します)
- すべての行と列に対してこれを行います。完了する前にメモリが不足します。
- フォーマットされたスプレッドシートをサーバー ディレクトリに保存して、ユーザーがダウンロードして、埋め込まれたすべてのエラー警告または情報アイテムを確認できるようにします。読み取り行数を制限しても問題なく動作します。

スプレッドシートは 130 行と 60 列で特に大きなものではありません。

これは私が試したことです:
- 「チャンク」で読む ala Mark Ba​​ker。問題は、フィルターが行のサブセットのみを返すことです。チャンク ルールに関連付けられているもの。そのため、チャンクの読み取りと処理の最後に保存しようとすると、スプレッドシート全体ではなく、それらの行のみが保存されます。
- セル キャッシングの使用 (

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

) を使用すると、すべての行と関連するセルを読み取って更新できますが、これを実行する$objWriter->save(str_replace('.php', '.xlsx', $theDIRandFileName)と、XMLWriter.php でメモリの問題が発生します。

Fatal error: Allowed memory size of 18874368 bytes exhausted (tried to allocate 238592 bytes) in ... /PHPExcel/Shared/XMLWriter.php on line 100

ああ!

どんな援助でも大歓迎です。現時点では、2 つのコピーを開き、チャンク アプローチを使用して、編集されていないバージョンを読み取り、チャンク バージョンを更新する方法を理解する必要があるようです。もっと良い方法があるはずです。

4

0 に答える 0