1.引入
<!--easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
2.设置模板 打印模板.xlsx
3.相关代码
@ApiOperation(value = "获取excle,根据excle模板")
@GetMapping("getExcel")
public void getExcel(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + DateUtil.currentTimeSeconds() + ".xlsx");
//指定excel模板文件
// String templateFileName = "C:\\Users\\13628\\Desktop\\打印模板.xlsx";
ResourceLoader resourceLoader = new DefaultResourceLoader();
InputStream templateFileInputStream = resourceLoader.getClassLoader().getResourceAsStream("打印模板.xlsx");
//指定填充后保存excel的文件
// String fileName = "C:\\Users\\13628\\Desktop\\demo.xlsx";
//数据
Map<String, Object> map = new HashMap<String, Object>();
map.put("payTime", "2023-08-09");
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 5; i++) {
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("gname", "测试"+i);
map1.put("price", 2.38+i);
map1.put("relPrice", 3.38+i);
list.add(map1);
}
map.put("records", list);
//导出
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileInputStream).build()){
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置
//forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// 如果数据量大 list不是最后一行 参照下一个
FillConfig fillConfig =
FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(map, writeSheet);
excelWriter.fill(new FillWrapper("records", list), fillConfig, writeSheet);
}
}
4.apifox调试,返回文件流,点击下载即可下载文件
下载后文件