7

ほぼ 100,000 レコードのデータがあり、Java コードを使用してデータを.xlsxファイルに書き込もうとしています。XSSFWorkbookデータベースからすべてのデータを取得できますArrayList。を繰り返すことで、セルごとにファイルArryListにデータを書き込んでいます。.xlsx8000 行に達すると、Java コードはOut of Memory Heap Spaceエラーをスローします。

SXSSFWorkbookに比べたら軽いとどこかで読んだXSSFWorkbookので使ってみSXSSFWorkbookました。しかし、それでも私は同じ問題に直面しています。

ワークブックまたは Java コードで不足しているものはありますか??

最初は、60,000 レコードのデータがあるとき、.xlsファイルを使用していました。.xls同じ Java コードで、.xmlファイルを生成できますHSSFWorkbook

私のデータは将来大幅に増加するため、Javaヒープスペースを増やすことはまったく選択肢ではありません。

どんな助けでも大歓迎です。

小さなコード、データを Excel に書き込む方法。

int rowNum = sheet.getLastRowNum();

Row lastRow = null ;

Cell cell = null;

ReportingHelperVo reportingHelperVo = null; 

for (ReportingVo reportingVo : reportingVos) {

rowNum++;

lastRow = sheet.createRow(rowNum);

reportingHelperVo = reportingVo.reportingHelperVo;

cell = lastRow.createCell(0);

cell.setCellValue(reportingHelperVo.getLocation());

cell.setCellStyle(style);

cell = lastRow.createCell(1);

cell.setCellValue(reportingHelperVo.getCity());

cell.setCellStyle(style);

cell = lastRow.createCell(2);

cell.setCellValue(reportingHelperVo.getCountry());

cell.setCellStyle(style);

}
4

9 に答える 9

10

SXSSFWorkbook軽量というわけではありませんが、これには利点があります。

として宣言すると

SXSSFWorkbook workbook= new SXSSFWorkbook(200);

次に、ワークブックに 200 行が書き込まれるたびに、メモリがディスク領域にフラッシュされるため、ヒープ領域に負荷がかかりません。

于 2014-05-24T08:12:37.797 に答える
5

XSSFWorkbook-すべてのExcelドキュメントのオブジェクト表現を作成します(DOMのように機能する必要があります)。

SXSSFWorkbook-一定のメモリが必要です。OOMはいつJMVによってスローされますか?どのタイプのResultSetを使用しましたか?FORWARD_ONLYを使用して、DBから取得したJDBCドライバーによるデータのキャッシュを制限してみてください。

ところで、OutOfMemoryErrorを修正する最善の方法は、ヒープダンプを分析することです。-XX:+ HeapDumpOnOutOfMemoryErrorパラメーターとMATを使用して、アプリケーションがどのように機能するかを理解します。

于 2013-01-10T14:44:02.317 に答える
2

データをセルごとに .xlsx ファイルに書き込んでいます。8000 行に達すると、Java コードが Out of Memory Heap Space エラーをスローします。

繰り返しごとに Java オブジェクトを作成するのではなく、既存の Java オブジェクトを再利用しnewます。

または、Excel の代わりに csv ファイルを使用します。

于 2013-01-10T14:35:16.893 に答える
1
Workbook workBook = new SXSSFWorkbook();

100000 件を超えるレコードをエクスポートできます。

于 2013-01-11T12:24:55.377 に答える
0

私のExcelが3000行に達したとき、私は同じ問題を抱えています。私の場合、POI Excel 生成に関するメイン メモリ関連の問題は、スタイル シートで発生します。以下は、コードから削除したものです。

  1. 行レベルでスタイルシート設定を使用してみてください。
  2. すべてのセルにスタイルシートを設定する必要がある場合は、すべてのセルに境界線を設定しないでください。
于 2015-07-24T21:09:31.960 に答える
0

ページの結果は、すべてを一度に読み取るのではなく、データベースから取得されます。

于 2013-01-10T14:36:52.477 に答える