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


    前言

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

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

     

    然后:

     

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

     

    正文

    开始实战:
     

    pom.xml依赖:
     

    1. cn.afterturn
    2. easypoi-base
    3. 3.0.3
    4. cn.afterturn
    5. easypoi-web
    6. 3.0.3
    7. cn.afterturn
    8. easypoi-annotation
    9. 3.0.3

    我们导出数据的实体类  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 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文件内容:

     

    好了,该篇就到这。

  • 相关阅读:
    【从零开始的Java开发】2-10-4 Servlet与jsp进阶:请求与响应的结构、请求转发与响应重定向、Cookie
    0门槛!用ChatGPT只花1天批量生成300个爆火TikTok视频
    义乌再次位列第一档!2022年跨境电商综试区评估结果揭晓!
    hyperf 模型批量更新数据
    Web核心
    3.JS数组求和的几种方法
    010 springboot整合mybatis-plus 登录页面和首页不拦截
    Redis基础学习
    Java核心知识点十万字最强总结(从基础到高级,Java的核心知识点的下篇,全部都是精华)
    Java8实战-总结24
  • 原文地址:https://blog.csdn.net/qq_35387940/article/details/125804467