当前位置:   article > 正文

通过EasyExcel实现对数据集合转换成Excel文件并提供下载_easyexcel 根据数据集合生成excel文件

easyexcel 根据数据集合生成excel文件

开源插件介绍

  • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
  • EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是磁盘上一行行读取数据,逐个解析
  • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

其使用的场景是有许多的,功能也十分强大。

本次我使用的是基础的web写,导出Excel文档。

首先添加一个 链接 ,里面写的还是比较详细了的

基本的使用理念就是把一个集合数据转换成Excel模式的文档。


实现一个基础的web写操作

首先我们来做一些准备工作:

  1. 第一步引入依赖文件

    <!-- 官方文档里面提醒了最好不要跨大版本跟新使用,可能会出现一些不必要的bug -->
    <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
  2. 第二步设置我们的Data数据

@Data
public class DemoData {
		//文档最上面行的标题符号,安装定义的上下顺序,呈现出来在Excel中的顺序是从左到右的
		//当然官方文档中还有许多其他特殊格式的定义,如:自定义拼接字符、日期格式、小数转百分数
    @ExcelProperty("字符串标题")
    private String string;
    @ExcelProperty("日期标题")
    private Date date;
    @ExcelProperty("数字标题")
    private Double doubleData;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 选择需要的写方法,此次在对应的需求中我采用的是web中的写,改方法可以将集合中的数据写入表格中,并提供下载。

    /**
         * 文件下载(失败了会返回一个有部分数据的Excel)
         * <p>
         * 1. 创建excel对应的实体对象 参照{@link DownloadData}
         * <p>
         * 2. 设置返回的 参数
         * <p>
         * 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
         */
        @GetMapping("download")
        public void download(HttpServletResponse response) throws IOException {
            // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
    				// "测试" ----> 最终导出的文件名字
            String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
    				// 此处的 DemoData.class 为第二步中定义的Data数据,
    				// sheet("模板")     "模板"  为 Excel中sheet的名称
    				// doWrite(data())  data() 为 我们需要导入的数据集合
            EasyExcel.write(response.getOutputStream(), DemoData.class).sheet("模板").doWrite(data());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

以上三步操作就是实现了简单的写操作,其他操作可以继续在官方文档中学习使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/590413
推荐阅读
相关标签
  

闽ICP备14008679号