背景:
项目中填报业务表是动态表,需求是在某个归集分析页加导出功能,导出的数据会包含多个表,所以就有了动态字段的导出功能。
处理方式:
1.多文件以压缩包格式导出
2.多sheet(工作表),一个文件导出
@@当然,这里用poi一样可以实现,相比EasyExcel不是很方便,其次,当数据量较大会有性能问题, POI方式可参考 >> SpringBoot 动态生成多个Excel文件以压缩包.zip格式下载 这里就以EasyExcel为例:
1.引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.8</version>
</dependency>
2. 代码实现
2.1 写入多个sheet表
官方参考文档:重复多次写入写到单个或者多个sheet
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("部门归集数据", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
ExcelWriter writer = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
// 多个sheet表这个循环
for (遍历多个模板){
List<List<String>> heads = new LinkedList<>(); // 表头要设置为这种格式
// 设置表头
WriteSheet mainSheet0 = EasyExcel.writerSheet(i, templateVo.getTemplateTitle().replace("表", "") + "_" + i).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
mainSheet0.setHead(heads);
// 写入数据
writer.write(dataList, mainSheet0);
}
// 最后 finish
if (null != writer) {
writer.finish();
}
2.2 多个文件以压缩包导出
可参考 >> 动态生成多个Excel文件以压缩包.zip格式下载
这以下地方修改就可以 ↓
END