Springboot 指定自定义模板导出Excel文件

x33g5p2x  于2022-07-20 转载在 Spring  
字(3.3k)|赞(0)|评价(0)|浏览(773)

前言

之前写过一篇极其简单的excel导入导出,是单个文件的:
Springboot 最简单的结合MYSQL数据实现EXCEL表格导出及数据导入_小目标青年的博客-CSDN博客 

还写过一篇单个,多个 excel文件导出,转成ZIP包的:
Springboot 导出Excel文件,多个需要压缩成 zip 包_小目标青年的博客-CSDN博客 

然后:

于是该篇就来了, 指定模板(自定义)导出数据,就像:

正文

开始实战:
 

pom.xml依赖:
 

  1. <!-- 导入和导出-->
  2. <dependency>
  3. <groupId>cn.afterturn</groupId>
  4. <artifactId>easypoi-base</artifactId>
  5. <version>3.0.3</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>cn.afterturn</groupId>
  9. <artifactId>easypoi-web</artifactId>
  10. <version>3.0.3</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>cn.afterturn</groupId>
  14. <artifactId>easypoi-annotation</artifactId>
  15. <version>3.0.3</version>
  16. </dependency>

我们导出数据的实体类  UserExcelDTO.java

  1. import cn.afterturn.easypoi.excel.annotation.Excel;
  2. /**
  3. * @Author: JCccc
  4. * @Date: 2022-7-14 10:58
  5. * @Description:
  6. */
  7. public class UserExcelDTO {
  8. @Excel(name = "学号", height = 8, width = 13, isImportField = "true")
  9. private Integer id;
  10. @Excel(name = "姓名", height = 8, width = 13, isImportField = "true")
  11. private String userName;
  12. @Excel(name = "年龄", height = 8, width = 13, isImportField = "true")
  13. private String userAge;
  14. @Override
  15. public String toString() {
  16. return "User{" +
  17. "id=" + id +
  18. ", userName='" + userName + '\'' +
  19. ", userAge='" + userAge + '\'' +
  20. '}';
  21. }
  22. public UserExcelDTO() {
  23. }
  24. public UserExcelDTO(Integer id, String userName, String userAge) {
  25. this.id = id;
  26. this.userName = userName;
  27. this.userAge = userAge;
  28. }
  29. public Integer getId() {
  30. return id;
  31. }
  32. public void setId(Integer id) {
  33. this.id = id;
  34. }
  35. public String getUserName() {
  36. return userName;
  37. }
  38. public void setUserName(String userName) {
  39. this.userName = userName;
  40. }
  41. public String getUserAge() {
  42. return userAge;
  43. }
  44. public void setUserAge(String userAge) {
  45. this.userAge = userAge;
  46. }
  47. }

里面使用了 @Excel注解标记一下相关字段

然后自定义模板, 注意里面细节:

每一行数据都是一个对象,都在list 里面,

所以看到 首个字段 和 末尾最后的字段 是有 括号的   {}:

示例格式:
 
{{$fe: list t.id

t.userName

t.userAge}}

然后把自定义模板文件丢到 静态资源路径下:
 


 

然后是实现使用自定义模板,填充list数据导出excel文件:

 

  1. /**
  2. * excel导出 列表 指定模板
  3. *
  4. * @return
  5. */
  6. @GetMapping(value = "/exportAssignTemplateExcel")
  7. public void opportunityExport(HttpServletResponse response) {
  8. List<UserExcelDTO> exportList = new ArrayList<>();
  9. UserExcelDTO userExcel1=new UserExcelDTO(1001,"JCccc","18");
  10. UserExcelDTO userExcel2=new UserExcelDTO(1002,"ACccc","29");
  11. UserExcelDTO userExcel3=new UserExcelDTO(1003,"GCccc","50");
  12. exportList.add(userExcel1);
  13. exportList.add(userExcel2);
  14. exportList.add(userExcel3);
  15. Map map = Maps.newHashMap();
  16. map.put("list", exportList);
  17. //获取导出模板地址
  18. ClassPathResource classPathResource = new ClassPathResource("static/export/template/MyUserTemplate.xlsx");
  19. String path = classPathResource.getPath();
  20. TemplateExportParams templateExportParams1 = new TemplateExportParams(path);
  21. Workbook wb = ExcelExportUtil.exportExcel(templateExportParams1, map);
  22. String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd_HH_mm_ss"));
  23. String fileName = "用户数据"+time+".xlsx";
  24. try {
  25. response.setContentType("application/octet-stream;charset=utf-8");
  26. response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
  27. response.flushBuffer();
  28. wb.write(response.getOutputStream());
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }

代码简析:

调用一下接口,看看效果:
 

excel文件内容:

好了,该篇就到这。

相关文章