Java 读取xlsx

时间:2023-07-17 17:41:20

读取特别大的xlsx文件时, 需要使用StreamingReader, 可以控制JVM内存峰值在200M以内

InputStream is = new FileInputStream(new File(filePath));
StreamingReader reader = StreamingReader.builder()
.rowCacheSize(10) // number of rows to keep in memory (defaults to 10)
.bufferSize(1024) // buffer size to use when reading InputStream to file (defaults to 1024)
.sheetIndex(0) // index of sheet to use (defaults to 0)
.read(is); // InputStream or File for XLSX file (required) for (Row r : reader) {
for (Cell cell : r) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print("D" + cell.getNumericCellValue() + "\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print("S" + cell.getStringCellValue() + "\t");
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.print("B" + (cell.getBooleanCellValue() + "\t"));
break;
}
}
System.out.print("\n");
}

https://github.com/monitorjbl/excel-streaming-reader

相比较官方的方案

File file = new File("C:\\D\\Data Book.xlsx");
OPCPackage opcPackage = OPCPackage.open(file);
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);

官方的方案内存占用明显较高.