Java を使用してプログラムで Excel (.xls MS Excel 2003 形式) ファイルに書き込もうとしています。Excel出力ファイルには、シート数に分割する予定の〜200,000行が含まれる場合があります(Excelの制限により、シートあたり64k行)。
Apache POI API を使用してみましたが、API オブジェクト モデルが原因でメモリを大量に消費しているようです。メモリ内のワークブック オブジェクトにセル/シートを追加する必要があり、すべてのデータが追加されると、ワークブックをファイルに書き込むことができます。これは、Apache が API を使用して Excel ファイルを作成することを推奨する方法のサンプルです。
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");
//Create a row and put some cells in it
Row row = sheet.createRow((short)0);
// Create a cell and put a value in it.
Cell cell = row.createCell(0);
cell.setCellValue(1);
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
明らかに、約 2 万行 (各行に 10 ~ 20 列) を書き込むと、恐ろしい "java.lang.OutOfMemoryError: Java heap space" が表示されます。
XmsおよびXmxパラメーターをXms512mおよびXmx1024として使用して、JVMの初期ヒープサイズと最大ヒープサイズを増やしてみました。ファイルに 15 万行以上を書き込むことはまだできません。
ディスクに書き込む前にファイル全体をメモリに構築するのではなく、Excel ファイルにストリーミングする方法を探しています。これにより、多くのメモリ使用量が節約されることが期待されます。代替の API またはソリューションをいただければ幸いですが、私は Java の使用に制限されています。ありがとう!:)