前言
- 记录阿里的
easyexcel
工具的相关使用: - 导入、导出、下拉、级联下拉
一、快速开始
1、导入依赖
- 导入pom
<dependency> |
- 通过pom依赖,我们知道它是基于poi再次封装的。
2、开始使用
easyexcel
封装了一个工厂类:EasyExcelFactory
,我们直接调用即可。- 一般在项目中会用到:
EasyExcel
它其实就是EasyExcelFactory
的子类且没有自己的功能。
3、写Excel
- EasyExcel 封装了很多方法,可以自己点进去看
- 导出模板
public class Demo { |
4、读Excel
- 读取excel
|
二、上传下载
- 上次下载,需要用到servlet,这边直接使用springboot
- dmeo如下:
|
三、图片导出
- 为啥只有导出呢,因为目前(
(ง •_•)ง 2021-05-28
) easyexcel暂不支持图片的导入。
|
四、自定义格式转换
- 格式转换,一般用的最多的就是时间格式
- 时间类型一般有:Date 和 LocalDateTime
- 如果使用的是Date可以用注解格式化,如果使用LocalDateTime需要自己写转换器
/** |
- 如果是其他需要用到转换,只需实现
Converter<T>
接口即可。 convertToJavaData()
这个方法是从Excel转到Java类型,反之convertToExcelData()
是Java到Excel。- 自定义转换器,只需重写上面两个方法即可。
五、实现下拉框
- 实现动态下拉框导入功能
- 为了方便复用,这边使用自定义注解的方式
1、自定义注解
- 我们自定义一个放在字段上的注解
@Documented |
2、自定义Handler
- 自定义一个Handler,给Excel设置下拉框数据约束
/** |
3、导出的实体类
- 固定下拉使用:
source
,动态下拉使用:sourceClass
@Data |
4、动态下拉实现类
- 只需要实现
getSource()
方法,返回下拉的集合即可 - 这边模拟了下数据库查询,因为这里不能直接使用注解自动注入
- 所有通过上下文工具类获取示例。
/** |
5、导出模板
- 这边演示导出到浏览器
- 因为很多内容可以复用,随意封装了下工具类:
EasyExcelUtils
EasyExcelUtils
/** |
- 导出浏览器,主要看:
exportBrowser()
方法即可 - SpringBoot请求接口如下:
@Controller |
六、级联下拉框
- 能导出下拉框,是不是也能做成级联下拉框呢
- 答案是肯定的。但是就是比下拉框麻烦一点点
- 因为不只要设置数据有效性,还有设置名称管理器,和级联有效性等。
- 我们也定义一个自定义注解:
ChainDropDownFields
1、自定义注解
/** |
- 上面字段都有注释解析
2、定义实体类
- 定义一个实体类,下拉和级联下拉,复合使用
@Data |
- 上面可以看到有:国家 省 市 区 4个级联下拉,可以一直级联…
3、定义注解实现类
- 内容如下
/** |
- 这里的
getRoot()
返回的是第一层下拉,因为没有父级,所以直接返回一个集合下拉列表即可。 getParentBindSubMap()
这里返回的是第二级及之后的下拉列表,是一个Map,key是上一级的所有值,value是key的子集。- 我也不知道还有没有好一点的方法来搞这个级联下拉。
4、级联下拉Handler
- 这个才是重点,有些重要的地方都写了注释
/** |
- 这里其实复杂的就是设置名称管理器和它的级联关联有效性,我不知道还没有更好的方法。
5、导出级联下拉模板
- 也是使用springboot
@Controller |