1.记录一个之前用Easyexcel导出时没有遇见的问题,今天导出功能换了个模板,就报错了,导出代码如下:
try{
List<T> list = new ArrayList<>();
String templateFilePath = FileConstants.xxx + File.separator + "xxx.xlsx";
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("xxxx", "UTF-8");
response.setHeader("Access-Control-Expose-Headers","Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).autoTrim(false).withTemplate(templateFilePath).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(list,writeSheet);
excelWriter.finish();
}catch (Exception e) {
log.error("" + e.getMessage());
}
2.报的错误如下
3.查了很久这个问题,最后终于找到解决方案,在代码中加下面的这行代码就可以顺利导出了
// 注意:forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。这会把所有数据放到内存,数据量大时会很耗内存
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(list, fillConfig, writeSheet);