使用xlsx-streamer读取 .xlsx格式文件,可将部分数据按次缓存到内存中,已经读取的数据进行GC处理,解决OOM问题。只支持 Excel2007版本,不支持Excel2003版本。
1、导入包:xlsx-streamer.jar
注意(我也是使用了好几个版本):poi3.9版本,只支持搭配 xlsx-streamer-1.0.0.jar,其他版本不兼容;poi4.0可使用streamer2.0。
2、读取方式修改
Workbook wb = StreamingReader.builder()
.rowCacheSize(100) // 缓存内存页数(默认10)
.bufferSize(1024) // 缓存内存字节(默认1024)
.open(fis); // 文件(FileInputStream())
// getNumberOfSheets() 可获取所有Sheet页数
3、后面继续wb的循环读取操作(注意:只能用逐个遍历,for 或 iterator(),无法使用 getRow(i) 、getCell(i) 来按需获取数据,StreamingReader读取方式不支持)
for (Row row : sheet) {
// 遍历行
for (Cell cell : row) {
// 遍历列
}
}