问题描述
现在需要使用 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 ;