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
- 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调试,返回文件流,点击下载即可下载文件

下载后文件
