1.引入
com.alibabaeasyexcel3.3.1com.github.whvcseeasy-captcha1.6.2
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 map = new HashMap();map.put("payTime", "2023-08-09");List<Map> list = new ArrayList<Map>();for (int i = 0; i < 5; i++) {Map map1 = new HashMap();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调试,返回文件流,点击下载即可下载文件
下载后文件