2

SocketConnectionExceptionバルクデータ(50万レコード以上)のExcelファイルを生成しているときに取得しています。

私のWebアプリケーションのコードは`outputstreamに書き込みます。コードの抜粋は次のとおりです。

while (sr.next()) {
      counter++;  //advance counter
      view = (DataClass) sr.get(0);
      try {
          //writing fields values for Activity Report file
          reportService.writeExcelFieldsValue(rowCounter,sheet,view,user,exportedFields);
          rowCounter++;
      } catch (Exception e) {
          throw new RuntimeException(e);
      }

      if (counter == chunkSize || sr.isLast()) {
          counter = 0;  //reset counter
          //Clear the session after a chunk and before next chunk
          getSession().clear();
      }
}
wb.write(bos);
bos.flush();
4

1 に答える 1

0

POI は、XSSF の上に構築された低メモリ フットプリントの SXSSF API を提供します。

SXSSF は、XSSF の API 互換ストリーミング拡張機能であり、非常に大きなスプレッドシートを作成する必要があり、ヒープ スペースが限られている場合に使用されます。SXSSF はスライディング ウィンドウ内の行へのアクセスを制限することでメモリ フットプリントを低く抑えますが、XSSF はドキュメント内のすべての行へのアクセスを提供します。ウィンドウに表示されなくなった古い行は、ディスクに書き込まれるため、アクセスできなくなります。

自動フラッシュ モードでは、アクセス ウィンドウのサイズを指定して、特定の数の行をメモリに保持できます。その値に達すると、追加の行が作成され、インデックスが最も小さい行がアクセス ウィンドウから削除され、ディスクに書き込まれます。または、ウィンドウ サイズを動的に拡大するように設定できます。必要に応じて、flushRows(int keepRows) を明示的に呼び出して定期的にトリミングできます。

実装のストリーミングの性質により、XSSF と比較すると次の制限があります。

  • 一度にアクセスできる行数は限られています。
  • Sheet.clone() はサポートされていません。式の評価はサポートされていません
  • このリンクが役立つと思います

XSSF EventModel コードを使用したいと思うでしょう。開始するには、 POI ドキュメントを参照してください。または 詳細については、ここをクリックしてください

また、このリンクが役立つ場合があります。 POI を使用して大きな結果セットを Excel ファイルに書き込む

于 2013-03-15T07:46:10.310 に答える