springboot easyexcel 导出文件实践
地崩山摧壮士死,然后天梯石栈相钩连。
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 数据导入
对于 excel
的导入,需要先使用 AnalysisEventListener
,用来解析和处理数据,将读取到的数据添加到 list
集合中。这里可以使用自定义的监听器,也可以使用 easyexcel
的 SyncReadListener
用来处理数据。
通常情况下对于数据的读取处理,可以采用注入 AnalysisEventListener
的方式,直接将数据保存和转换的业务放置在监听器中来实现。对于存在并发场景,考虑到读取 excel
数据比较耗时,可以将 AnalysisEventListener
注入为原型模式,每次读取数据都会重新获取一个 bean
来处理,这样就可以解决并发的问题。
在本文中,采用的是另外一种方式,即创建对象的方式,每次读取数据都会新建一个监听器用来收集传递的数据,进行下一步的业务处理,这一点和原型模式类似,主要是考虑到数据的读取和业务处理解耦。
4 easyexcel 数据导出
对于数据的导出,通常情况下只会导出一个 sheet
数据,在本文中将展示多个 sheet
的导出,另外也会对导出的文件设置密码,保证导出数据文件的安全性。
首先需要设置文件导出的相应头信息,设置文件类型是为了方便浏览器识别其文件的格式,此外还要设置文件的名称,通常还需要将文件名称进行编码,避免浏览器导出的文件为乱码的情况。
对于文件的导出,需要先通过 EasyExcelFactory.writerSheet
创建导出的 sheet, 通常情况下导出的数据会在一个 sheet
中,如果数据需要分组或者导出不同的数据到不同的 sheet
中,则需要创建多个 sheet
并写入数据。如下图所示分为了一个 sheet
和 多个 sheet
的数据长处场景。
创建的 WriteSheet
需要写入 ExcelWriter
中,ExcelWriter
的创建可以设置文件导出的样式,以及设置文件的密码等信息。在操作完成文件的读写后,需要关闭文件流。
在导出数据时,采用了
faker
来 mock
数据,模拟从数据库查询出来的数据。 faker
通常用在测试环境中,制造测试数据用来模拟业务场景,可以 mock
的数据包括用户信息、公司信息、车辆信息、地址信息、网络信息、长文本等内容,此外还支持多种语言,功能非常强大。常用的场景如下图所示。
5 总结
在本文中详细介绍了 easyexcel
导入导出文件的方法以及注意事项,此外介绍了一款好用的工具javafaker
用来制造测试数据。本文中所涉及的代码已经上传至 github
, 欢迎交流学习。项目地址 springboot-auth。
转载自:https://juejin.cn/post/7382044535814815781