0

SXSSF ワークブック (約 100 万から 200 万) を使用して非常に大きな xlsx ファイルを作成するシナリオがあります。

  • シートへの書き込み中に、シートの行 1 のみにヘッダーなどの値を動的に入力する必要があります

問題: ストリーミング API 以来、100000 番目の行にいて、Row1 に何らかの値を入力したい場合、この時点で行 1 がフラッシュされ、利用できないことを書き込もうとします。

質問: 1. 行のフラッシュをブロックできますか? 2. 考えられる解決策はありますか?

Row1 の値を保持し、ワークブック全体をフラッシュし、ワークブックを再度読み込み、Row1 を作成して再度フラッシュすることを考えています。

より良い解決策をお願いします....

4

2 に答える 2

2

簡単に言えば、できません。SXSSF は、ファイル形式のストリーミング ライターです。行のセットがバッファから渡されると、ディスクに書き込まれ、順序付けが必要なファイル形式になります。その時点で、それらはなくなっており、変更することはできません。他のものがそれらの後に来ているからです。

ワークブック全体に対する完全な読み取り/書き込みアクセスが必要な場合は、フル機能の に切り替える必要がありますXSSFWorkbook。これはメモリ内のすべてをバッファリングするため、ファイルを書き込むときにのみシーケンスアウトされるため、好きなだけ好きな部分を変更できます。

XSSFWorkbookSXSSFWorkbookファイル全体をメモリに保持するため、よりも多くのメモリが必要です。おそらく、ヒープサイズを増やす必要があります。ただし、ほとんどの場合、メモリはプログラマーよりもはるかに安価なので、RAM を追加してください。

于 2013-05-17T14:50:17.863 に答える