前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyExcel 自定义枚举类型装换

EasyExcel 自定义枚举类型装换

作者头像
wsuo
发布2021-11-17 15:02:57
3.8K0
发布2021-11-17 15:02:57
举报
文章被收录于专栏:技术进阶之路技术进阶之路

问题描述

现在需要使用 EasyExcel 的报表导入导出功能,一般的字段都没有问题,但是由于系统使用了 Spring Boot + Mybatis Plus 的枚举类型映射功能,所以类似于 性别 的字段,在实体类中是下面的形式。

代码语言:javascript
复制
@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 这个接口即可实现我们想要的功能。

最终实现

所以在这里写一个自己的实现类:

代码语言:javascript
复制
/**
 * 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 中填写的值;

最后只需要在实体类性别字段上面的注解中增加一个属性即可:

代码语言:javascript
复制
/**
* 性别(0:女,1:男)
*/
@ExcelProperty(value = "性别(0:女,1:男)", converter = GenderTypeConverter.class)
private GenderType gender;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 解决思路
  • 最终实现
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档