前言
poi解析大excel文件可能出现oom,同样大小文件,xlsx会oom,xls不会,所以使用流式的方式改造解析xlsx文件的代码。
我的需求是提取每一页的表头,所以值提取第一行,如果需要全部内容,把行数循环地方的if改成while就行。
产生Workbook给的入参都是给的File,没用Inputstream,原因见后两章
依赖
可能不全,按需引入更多poi相关依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>2.2.0</version>
</dependency>
代码
//newExcel true表示xlsx,false表示xls
private static String excel(File file, boolean newExcel) throws Exception {
StringBuilder sb = new StringBuilder();
Workbook workbook = null;
try {
if (newExcel) {
//我只取第一行,你们按需调大
workbook = StreamingReader.builder()
.rowCacheSize(1)
.bufferSize(10240)
.open(file);
} else {
//xls的还是普通方式
workbook = WorkbookFactory.create(file);
}
getSheet(sb, workbook);
} finally {
if (workbook != null) {
workbook.close();
}

最低0.47元/天 解锁文章

622

被折叠的 条评论
为什么被折叠?



