大きな Excel 2007 ファイルを Apache POI で読みたいです。クイック スタート ガイドには、File
メモリを節約するために を使用する必要があると記載されています。
ワークブック (.xls HSSFWorkbook または .xlsx XSSFWorkbook) を開く場合、ワークブックはファイルまたは入力ストリームからロードできます。File オブジェクトを使用するとメモリ消費量を抑えることができますが、InputStream はファイル全体をバッファリングする必要があるため、より多くのメモリが必要になります。
したがって、私はこれについて次のように書きました。
opcPackage = OPCPackage.open(file);
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0);
rows = sheet.rowIterator();
if (rows.hasNext()) {
Row row = rows.next();
System.out.println(row.getCell(1).getStringCellValue());
}
ただし、java.lang.OutOfMemoryError: Java heap space
約 10000 行を超えるシートの結果になります。
ストリームのように、読み取り対象の行のみを反復して遅延ロードすることを望んでいました。
大きな Excel ファイルでのメモリの問題を回避するにはどうすればよいですか? Apache POI で遅延読み取りできますか?