将下面三层结合起来,请放心食用。

一、controller层

  1. @RestController
  2. public class EasyExcelController
  3. {
  4. private Logger logger = LogManager.getLogger(EasyExcelController.class);
  5.  
  6. @RequestMapping(value = "/Download")
  7. public void testExcelDownload(HttpServletResponse response)
  8. {
  9. //实际项目中,personList可以从数据库查出或者前端传过来
  10. //在这里用于测试
  11. List<Person> personList = new ArrayList<>();
  12. for (int i = 1; i < 5; i++)
  13. {
  14. Person person = new Person();
  15. person.setId(i);
  16. person.setName(i + "号杰瑞");
  17. person.setAge(i);
  18. person.setAddress(i + "号石华街");
  19. person.setDate(new Date());
  20. personList.add(person);
  21. }
  22. try
  23. {
  24. String fileName = "数据"; // Excel文件名称
  25. String sheetName = "欢乐番茄"; // 工作簿名称
  26. EasyExcelUtil.writeExcel(response, personList, fileName, sheetName, Person.class);
  27. }
  28. catch (Exception e)
  29. {
  30. logger.error("模板下载失败", e);
  31. }
  32.  
  33. }
  34.  
  35. }

二、工具类

  1. public class EasyExcelUtil
  2. {
  3.  
  4. public static OutputStream getOutputStream(String fileName, HttpServletResponse response)
  5. throws Exception
  6. {
  7. try
  8. {
  9. fileName = URLEncoder.encode(fileName, "utf-8");
  10. response.setContentType("application/vnd.ms-excel");
  11. response.setCharacterEncoding("utf-8");
  12. // 此处指定了文件类型为xls,如果是xlsx的,请自行替换修改
  13. response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xls");
  14. response.setHeader("Pragma", "public");
  15. response.setHeader("Cache-Control", "no-store");
  16. response.addHeader("Cache-Control", "max-age=0");
  17. return response.getOutputStream();
  18. }
  19. catch (IOException e)
  20. {
  21. throw new Exception("导出文件失败!");
  22. }
  23. }
  24.  
  25. public static void writeExcel(HttpServletResponse response, List list, String fileName,
  26. String sheetName, Class clazz)
  27. throws Exception
  28. {
  29. ExcelWriter writer = new ExcelWriter(getOutputStream(fileName, response), ExcelTypeEnum.XLS);
  30.  
  31. Sheet sheet = new Sheet(1, 0, clazz);
  32. sheet.setSheetName(sheetName);
  33. writer.write(list, sheet);
  34. writer.finish();
  35. }
  36. }

三、实体类

  1. @Data
  2. //自定义标题行高
  3. @HeadRowHeight(30)
  4. //自定义标题字体大小 默认14
  5. @HeadFontStyle(fontHeightInPoints = 15)
  6. //自定义文本内容行高
  7. @ContentRowHeight(20)
  8. //自定义文本字体大小 默认14
  9. @ContentFontStyle(fontHeightInPoints = 10)
  10. public class Person
  11. {
  12.  
  13. //忽略这个字段
  14. @ExcelIgnore
  15. private Integer id;
  16.  
  17. @ExcelProperty({"数据统计", "姓名"})
  18. private String name;
  19.  
  20. @ExcelProperty({"数据统计", "年龄"})
  21. private Integer age;
  22.  
  23. @ExcelProperty({"数据统计", "家庭地址"})
  24. @ColumnWidth(15)
  25. private String address;
  26.  
  27. //默认 yyyy-MM-dd HH:mm:ss 可以使用DateTimeFormat自定义日期格式
  28. @DateTimeFormat("yyyy年MM月dd日")
  29. //自定义列宽
  30. @ColumnWidth(15)
  31. @ExcelProperty("日期")
  32. private Date date;
  33.  
  34. public Date getDate()
  35. {
  36. return date;
  37. }
  38.  
  39. public void setDate(Date date)
  40. {
  41. this.date = date;
  42. }
  43.  
  44. public Integer getId()
  45. {
  46. return id;
  47. }
  48.  
  49. public void setId(Integer id)
  50. {
  51. this.id = id;
  52. }
  53.  
  54. public String getName()
  55. {
  56. return name;
  57. }
  58.  
  59. public void setName(String name)
  60. {
  61. this.name = name;
  62. }
  63.  
  64. public Integer getAge()
  65. {
  66. return age;
  67. }
  68.  
  69. public void setAge(Integer age)
  70. {
  71. this.age = age;
  72. }
  73.  
  74. public String getAddress()
  75. {
  76. return address;
  77. }
  78.  
  79. public void setAddress(String address)
  80. {
  81. this.address = address;
  82. }
  83.  
  84. @Override
  85. public String toString()
  86. {
  87. return "Person{" +
  88. "id=" + id +
  89. ", name='" + name + '\'' +
  90. ", age=" + age +
  91. ", address='" + address + '\'' +
  92. ", date=" + date +
  93. '}';
  94. }
  95. }

 POM依赖

  1. <!--ali-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>easyexcel</artifactId>
  5. <version>2.2.7</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.projectlombok</groupId>
  9. <artifactId>lombok</artifactId>
  10. <version>1.18.12</version>
  11. </dependency>

EasyExcel使用的更多相关文章

  1. 阿里巴巴excel工具easyexcel 助你快速简单避免OOM

    Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有 ...

  2. easyExcel导出excel的简单使用

    easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...

  3. 阿里 EasyExcel 使用及避坑

    github地址:https://github.com/alibaba/easyexcel 原本在项目中使用EasyPoi读取excel,后来为了统一技术方案,改用阿里的EasyExcel.EasyE ...

  4. EasyExcel导入工具(SpringMVC下使用)

    easyExcel:由阿里巴巴公司开发,由github托管 github上有详细使用文档 github地址:https://github.com/alibaba/easyexcel/blob/mast ...

  5. 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  6. Excel解析easyexcel工具类

    Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...

  7. easyexcel 读写测试

    <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId> ...

  8. EasyExcel 轻松灵活读取Excel内容

    写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...

  9. 【软件工具】easyExcel简明使用指南

    easyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不发的话可能还行,但是一旦并发上来 ...

  10. Excel映射到实体-easyexcel工具

    来源 项目需要把Excel进行解析,并映射到对象属性,实现类似Mybatis的ORM的效果.使用的方式是自定义注解+POI,这种方式代码复杂而且不易于维护. easyexcel是阿里巴巴开源的一个框架 ...

随机推荐

  1. vite初使用随记

    vite的安装 按照官网文档来看,并不难. 先检查自己电脑node的版本与npm的版本/yarn的版本 可以直接用yarn安装,yarn create vite 这是最原始的安装,即类似于安装vue- ...

  2. Vim 中进行文本替换

    Vim 中进行文本替换 格式 用法 :[range]s/from/to/[flags] tips: [] 表示该内容可选 参数 from 需要替换的字符串(可以是正则表达式) to 替换后的字符串 r ...

  3. 【大话云原生】煮饺子与docker、kubernetes之间的关系

    云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单的语言说明 ...

  4. C++ 类成员指针

    C++的类成员指针是一种奇葩的指针. 假设现在我们要表示一个三维的点,现在有两种定义方式: struct point1{ int x, y, z; }; struct point2{ int c[3] ...

  5. Visual Studio之安装(更新,扩展)速度缓慢解决方案

    一.背景 小伙伴们在安装visual studio,或者更新,扩展vs功能时,在家里网速正常的情况下,可能出现进度十分缓慢的问题,如何解决呢? 二.解决思路 修改hosts文件 1.地址:默认安装在 ...

  6. 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

    1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar.log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的 ...

  7. FinOps for Kubernetes - 如何拆分 Kubernetes 成本

    本文独立博客阅读地址:https://thiscute.world/posts/finops-for-kubernetes/ 目录 云计算成本管控 Kubernetes 成本分析的难点 Kuberne ...

  8. .NET Core 企业微信消息推送

    接口定义 应用支持推送文本.图片.视频.文件.图文等类型.请求方式:POST(HTTPS)请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send? ...

  9. Linux系统句柄优化

    Linux系统句柄介绍 文件句柄,会随着进程数增加而增加.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024.在生产环境中很容易到达这个值,因此这里就会成为系统的瓶颈. 在Linux ...

  10. JavaScript中if语句优化和部分语法糖小技巧推荐

    前言 在前端日常开发过程中,if else判断语句使用的次数应该是比较频繁的了,一些较为复杂的场景,可能会用到很多判断,在某个代码块使用很多if else时,代码会显得较为冗余,阅读起来不够清晰. 除 ...