EasyExcel 自定义枚举类型装换
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
问题描述
现在需要使用 EasyExcel 的报表导入导出功能,一般的字段都没有问题,但是由于系统使用了 Spring Boot + Mybatis Plus 的枚举类型映射功能,所以类似于 性别
的字段,在实体类中是下面的形式。
@ExcelProperty(value = "性别(0:女,1:男)")
private GenderType gender;
其中的枚举类使用了 @EnumValue
注解,完成了自动映射,这使得在查询数据库的时候,我们和数据库交互的工具 Mybatis Plus 可以自动帮我们完成类型的封装和拆解;但是我们和 Excel 交互的工具 EasyExcel 默认并不具备这个功能,需要我们自己完成拆解和封装。
例如我们在 Excel 的性别字段中填写数字 1
表示的是枚举类型的性别 男
,但是 EasyExcel 会认为要把数字类型的 1 转化为 枚举类型 GenderType
,这样就会报错。
解决思路
既然默认不支持,就查阅文档,肯定预留了接口。文档地址:https://www.yuque.com/easyexcel/doc/easyexcel
在这部分发现了预留的接口。
只需要继承 Converter
这个接口即可实现我们想要的功能。
最终实现
所以在这里写一个自己的实现类:
/**
* Excel 性别类型装换器
*
* @author wang suo
* @version 1.0
* @date 2021/9/14 15:06
*/
@Slf4j
public class GenderTypeConverter implements Converter<GenderType> {
@Override
public Class supportJavaTypeKey() {
return null;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return null;
}
@Override
public GenderType convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
// 导入的时候直接导入数字即可 不用操作
if (cellData.toString().equals("1")) {
return GenderType.MAN;
} else {
return GenderType.WOMEN;
}
}
/**
* 将从数据库中查到的数据转换为 Excel 展示的数据
*
* @param value 枚举对象
*/
@Override
public CellData convertToExcelData(GenderType value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
// 将枚举类型按照 key 传值
return new CellData(value.getKey().toString());
}
}
其中:
convertToJavaData
是将 Excel 读取到的值转化为 Java 类型;convertToExcelData
是将 Java 类型转为 Excel 中填写的值;
最后只需要在实体类性别字段上面的注解中增加一个属性即可:
/**
* 性别(0:女,1:男)
*/
@ExcelProperty(value = "性别(0:女,1:男)", converter = GenderTypeConverter.class)
private GenderType gender;
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df
Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io`
3 个月前
更多推荐
已为社区贡献9条内容
所有评论(0)