目前有很多字段是有枚举来做映射的,现在导出时我需要对每个枚举类进行转换,所以想能否支持按枚举类来直接做映射,而不是手动去写
[alibaba/easyexcel]在使用Converter接口时,能否使用枚举类来返回映射的值?
回答
枚举Converter和普通Converter没有任何区别,你自定义就行了啊 。不懂你想问的问题
是这样,我现在有几十个枚举类,我不想每个导出都要写一个converter接口实现类,所以想问问有没有通用的方案
你可以定义一个接口,让你的枚举实现。然后写这个接口的converter
是的,我刚才想到这个了,正在尝试
甚至你可以直接写一个Enum的converter也可以。手动注册进你本次执行就可以
public class EnumConverter implements Converter<Enum<?>> { @Override public Class<?> supportJavaTypeKey() { return Enum.class; } @Override public WriteCellData<?> convertToExcelData(WriteConverterContext<Enum<?>> context) { return new WriteCellData<>("自定义:" + context.getValue().name()); } }
好的,谢谢,我试一下 这样写还是要在每个字段加注解吧
我转换了下思路,实现了,不知道你那边是否可以这样使用 EnumConvert是通用转换类,LocationAreaTypeEnum是我对应的枚举类 @EasyExcelConvertAnnotation是我自己定义的一个注解,主要传入一个枚举类 接着在通用转换类中使用excelContentProperty对象,将注解上的枚举类获取到,接着映射一下就可以了
celContentProperty对象,将注解上的枚举类获取到,接着映射一下就可以了
你搞这么麻烦干嘛,把导出VO类里面需要枚举的字段,设置成枚举类型,这个枚举实现一个接口,获取name,然后用通用枚举就行了啊
现在的问题是,每个枚举字段都要带上注解 @ExcelProperty(converter = EnumConverter.class) 我的意思是,不能全局注解EnumConverter,如果能注册,这个注解我都不用带
celContentProperty对象,将注解上的枚举类获取到,接着映射一下就可以了
你搞这么麻烦干嘛,把导出VO类里面需要枚举的字段,设置成枚举类型,这个枚举实现一个接口,获取name,然后用通用枚举就行了啊
我的业务场景不能改字段类型,我这种适合我当前的业务
泛型E是我自用的,可以不用带
你的这种方式我考虑过,但是放弃了