22

Web サーバー上に非常に大きな POI ワークブックを作成しています。ワークブック全体をメモリに保持すると、複数の同時リクエストに対応できません。ワークブックをサーブレット出力ストリームに段階的に書き込む方法はありますか。これにより、応答時間が短縮され、プロセスのメモリが効率的になります。

4

5 に答える 5

10

Excel 2007 (xslx) を生成しようとしている場合は、ここで説明されているように、BigGridDemo.java のアプローチを適応させることができます: http://web.archive.org/web/20110821054135/http://www.realdevelopers.com/blog /コード/エクセル

解決策は、POI がコンテナー xslx をテンプレートとしてのみ生成し、実際のスプレッドシート データを XML として zip 出力ストリームにストリーミングできるようにすることです。XML 生成の合理化は、あなた次第です。

于 2010-06-19T16:39:39.403 に答える
3

残念ながら、シーケンシャルデータの手段がない場合、それは不可能です。CSVやXMLなどの別の形式を探すことをお勧めします。どちらも順番に書き出すことができます。それがDBからのものである場合、まともなDBにはこれらの形式に効率的にエクスポートするための機能が組み込まれているため、より効率的に行うことができます。バイトを一方から他方にストリーミングする必要があります。

于 2010-04-20T12:15:51.763 に答える
1

HttpServletResponse.getOutputStream() に直接書き込みメソッドを試しましたか?

次の例を見てください。

 HSSFWorkbook wb = new HSSFWorkbook();
 HSSFSheet sheet = wb.createSheet("new sheet");
 ...
 OutputStream out = response.getOutputStream();
 wb.write(out);
 out.close();
于 2010-10-20T12:49:17.110 に答える
0

JExcelを使用する場合 サーブレットとの間でストリーム コードを読み取るサンプル コードがあります。 http://jexcelapi.sourceforge.net/resources/faq/

この API の唯一の欠点は、Excel 2003 までしかサポートしていないようです。

POI の使用 - ファイルを作成して、ファイルのバイトをサーブレット出力ストリームに提供できませんか?

于 2010-04-21T01:17:20.473 に答える