likes
comments
collection
share

springboot easyexcel 导出文件实践

作者站长头像
站长
· 阅读数 23

地崩山摧壮士死,然后天梯石栈相钩连。

1 前言

在项目开发过程中,经常会遇到数据导入导出的情况,通常都是使用的 xlsx 文件进行操作,在本文中将分享 easyexcel 的文件导入和导出,其中涉及到 Excel 的文件加密,以及分 sheet 导出文件配置。

2 环境准备

在使用 easyexcel 前,需要先引入最新的 java 依赖,这里采用了最新的版本,通常情况下会将 excel 的读写封装成工具类进行操作。另外为了模拟导出的数据信息,这里采用了 javafaker 来制造数据,这是一款非常好用的工具类。

-- easyexcel 工具类
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.4</version>
</dependency>
-- javafaker,mock 数据工具类
<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>1.0.2</version>
</dependency>

easyexcel 是对 poi 进行了封装,如果遇到复杂的数据导入场景,如非规则的数据式(单元格合并的场景) 也可以使用使用 poi 按照文件模板进行文件的读写操作,设置文件导出的样式等内容。对于通用的场景,easyexcel 完全可以适用,快速完成功能的实现,提搞开发效率。

3 easyexcel 数据导入

springboot easyexcel 导出文件实践

对于 excel 的导入,需要先使用 AnalysisEventListener ,用来解析和处理数据,将读取到的数据添加到 list 集合中。这里可以使用自定义的监听器,也可以使用 easyexcelSyncReadListener 用来处理数据。

通常情况下对于数据的读取处理,可以采用注入 AnalysisEventListener 的方式,直接将数据保存和转换的业务放置在监听器中来实现。对于存在并发场景,考虑到读取 excel 数据比较耗时,可以将 AnalysisEventListener 注入为原型模式,每次读取数据都会重新获取一个 bean 来处理,这样就可以解决并发的问题。

springboot easyexcel 导出文件实践

在本文中,采用的是另外一种方式,即创建对象的方式,每次读取数据都会新建一个监听器用来收集传递的数据,进行下一步的业务处理,这一点和原型模式类似,主要是考虑到数据的读取和业务处理解耦。

4 easyexcel 数据导出

对于数据的导出,通常情况下只会导出一个 sheet 数据,在本文中将展示多个 sheet 的导出,另外也会对导出的文件设置密码,保证导出数据文件的安全性。

首先需要设置文件导出的相应头信息,设置文件类型是为了方便浏览器识别其文件的格式,此外还要设置文件的名称,通常还需要将文件名称进行编码,避免浏览器导出的文件为乱码的情况。 springboot easyexcel 导出文件实践

对于文件的导出,需要先通过 EasyExcelFactory.writerSheet 创建导出的 sheet, 通常情况下导出的数据会在一个 sheet 中,如果数据需要分组或者导出不同的数据到不同的 sheet 中,则需要创建多个 sheet 并写入数据。如下图所示分为了一个 sheet 和 多个 sheet 的数据长处场景。

springboot easyexcel 导出文件实践

创建的 WriteSheet 需要写入 ExcelWriter 中,ExcelWriter 的创建可以设置文件导出的样式,以及设置文件的密码等信息。在操作完成文件的读写后,需要关闭文件流。

springboot easyexcel 导出文件实践 在导出数据时,采用了 fakermock 数据,模拟从数据库查询出来的数据。 faker 通常用在测试环境中,制造测试数据用来模拟业务场景,可以 mock 的数据包括用户信息、公司信息、车辆信息、地址信息、网络信息、长文本等内容,此外还支持多种语言,功能非常强大。常用的场景如下图所示。

springboot easyexcel 导出文件实践

5 总结

在本文中详细介绍了 easyexcel 导入导出文件的方法以及注意事项,此外介绍了一款好用的工具javafaker 用来制造测试数据。本文中所涉及的代码已经上传至 github, 欢迎交流学习。项目地址 springboot-auth

转载自:https://juejin.cn/post/7382044535814815781
评论
请登录