EasyExcel 枚举类型自定义转换

问题描述

现在需要使用 EasyExcel 的报表导入导出功能,一般的字段都没有问题,但是由于系统使用了 Spring Boot + Mybatis Plus 的枚举类型映射功能,会出现不能自动转换的问题,需要我们自定义转换

解决思路

官方文档:EasyExcel文档

枚举类

@Getter
public enum  StatusEnum {

    OPERATION(1, "作业中"),
    COMPLETED(2, "已完成");

    StatusEnum (int code, String name) {
        this.code = code;
        this.name = name;
    }

    @EnumValue
    private Integer code;
    @JsonValue
    private String name;

自定义实现类

@Slf4j
public class StatueConverter implements Converter<StatusEnum > {

    @Override
    public Class<?> supportJavaTypeKey() {
        return StatusEnum .class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    /**
     * 将 Excel 读取到的值转化为 Java 类型
     *
     * @param context
     * @return
     */
    @Override
    public StatusEnum convertToJavaData(ReadConverterContext<?> context) {
        for (StatusEnum statueEnum : StatusEnum .values()) {
            if (statueEnum .equals(context.getReadCellData().getData())){
                return statueEnum ;
            }
        }
        return null;
    }

    /**
     * 将 Java 类型转为 Excel 中填写的值
     *
     * @return
     */
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<StatusEnum > context) {
        return new WriteCellData<>(context.getValue().getName());
    }
}

实体类上添加转换类

    @ExcelProperty(value = "状态",converter = StatusEnum .class)
    private StatusEnum status ;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用 EasyExcel 进行读取 Excel 文件时,如果需要将 Excel 表格中的枚举转换成对应的 Java 枚举类型,可以使用 EasyExcel 提供的 `com.alibaba.excel.annotation.format.*` 注解来实现。 具体步骤如下: 1. 定义 Java 枚举类型: ```java public enum GenderEnum { MALE("男"), FEMALE("女"); private String value; GenderEnum(String value) { this.value = value; } public String getValue() { return value; } } ``` 2. 在实体类中使用 `@ExcelProperty` 注解并指定 `format` 属性,将 Excel 中的列与实体类中的属性进行映射,并指定对应的转换器类: ```java public class User { @ExcelProperty(value = "性别", index = 2) @FormatEnum(EnumConverter.class) // 指定转换器 private GenderEnum gender; // 省略其他属性和方法 } ``` 3. 实现 `EnumConverter` 类,继承 `com.alibaba.excel.converters.string.StringConverter` 并重写 `convertToJavaData()` 方法: ```java public class EnumConverter extends StringConverter { @Override public Class<?> supportJavaTypeKey() { return GenderEnum.class; } @Override public Object convertToJavaData(String value, ExcelContentProperty contentProperty) throws Exception { if (StringUtils.isEmpty(value)) { return null; } return GenderEnum.valueOf(value.toUpperCase()); } } ``` 在上述代码中,`supportJavaTypeKey()` 方法指定了需要转换的 Java 类型,`convertToJavaData()` 方法实现了将 Excel 中的字符串值转换成对应的枚举类型的逻辑。 完成上述步骤后,使用 EasyExcel 读取 Excel 文件时即可自动将枚举转换成对应的 Java 枚举类型
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值