easyexcel导出时将数据字典值转换为字符串 需要可用的版本
时间: 2023-12-25 07:02:42 浏览: 32
从 EasyExcel 2.2.0 版本开始,支持使用注解 `@ExcelProperty(value = "字段名", converter = XXXConverter.class)` 来自定义导出时的转换器。其中,`XXXConverter.class` 为自定义的转换器类,需要实现接口 `com.alibaba.excel.convert.Converter`。
可以在自定义的转换器中将数据字典值转换为字符串。具体实现可以参考以下代码:
```java
public class DictConverter implements Converter<String> {
private Map<String, String> dictMap;
public DictConverter(Map<String, String> dictMap) {
this.dictMap = dictMap;
}
@Override
public Class supportJavaTypeKey() {
return null;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return dictMap.get(cellData.getStringValue());
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return new CellData(value);
}
}
```
其中,`DictConverter` 接收一个数据字典 Map 作为参数,在 `convertToJavaData` 方法中将数据字典值转换为字符串返回即可。
使用方法如下:
```java
// 定义数据字典 Map
Map<String, String> dictMap = new HashMap<>();
dictMap.put("1", "男");
dictMap.put("2", "女");
// 定义导出数据列表
List<User> userList = new ArrayList<>();
// 创建导出参数对象
ExcelWriter writer = EasyExcel.write(outputStream).build();
WriteSheet sheet = EasyExcel.writerSheet("sheet1").build();
// 设置转换器
DictConverter dictConverter = new DictConverter(dictMap);
// 写入数据
writer.write(userList, sheet, new WriteHandler() {
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
// 注册转换器
writeSheetHolder.registerConverter(new ConverterKey("gender"), dictConverter);
}
});
// 关闭流
writer.finish();
```
其中,`ConverterKey("gender")` 表示需要将 `gender` 字段的值转换为字符串,`dictConverter` 为自定义转换器实例。