1.replace进行内容替换
@Excel(name = "是否有效", width = 30, replace = {"是_1","否_0","_null"})
private String isEffective;
Excel文件内'是否有效'这列的数据将会根据replace规则替换,例如 '是'会被替换为'1',空白会被替换为null。
反过来导出数据到Excel时,会反过来将'1'替换为'是',null替换为空白
replace方式的替换是写死的,并且以下划线_作为分割存在替换问题。例如"四川_成都_01"这种类型的替换不能做到将"四川_成都"转变为"01",而是将"四川"转变为"成都"。字典名中带有下划线_的类型不推荐使用replace
2.dict进行码值转换(推荐)
// dict = "YES_NO" , addressList = true表示导出时Excel单元格中配置下拉选
@Excel(name = "是否年龄限制",dict = YesNoEnum.TYPE, addressList = true,width = 30)
private String isAgeLimit;
根据配置的码表进行码值转换,不存在replace中的多个下划线导致替换有问题的情况
使用dict进行字典码值转换需要定义一个字典处理类并实现IExcelDictHandler接口
@Component
public class IExcelDictHandlerImpl implements IExcelDictHandler
接口的源码如图
// <字典分类编码 -- <字典数据编码 -- 字典数据名称>>
private Map<String, BiMap<String, String>> dictMap = new HashMap<>();
// 省略dictMap初始化
/**
* 根据输入的字典类型编码,获取对应字典map(封装在List中)
*
* @param typeCode
* @return
*/
@Override
public List<Map> getList(String typeCode) {
List<Map> result = new ArrayList<>();
BiMap<String, String> biMap = dictMap.get(typeCode);
if (ValidateUtil.isEmpty(biMap)) return null;
// 将字典数据转变为List<map>的格式返回,其中list.size()代表该字典枚举的数量,
// list中每一个map只存储一个枚举的编码-名称
for (Map.Entry<String, String> stringStringEntry : biMap) {
Map<String, String> map = new HashMap<>();
map.put("dictKey", stringStringEntry.getKey());
map.put("dictValue", stringStringEntry.getValue());
result.add(map);
}
return result;
}
// code -> name 对应导出
@Override
public String toName(String dict, Object obj, String name, Object value) {
if (ValidateUtil.isEmpty(value)) {
return null;
}
// 获取对应的字典
BiMap<String, String> biMap = dictMap.get(dict);
if (ValidateUtil.isEmpty(biMap)) {
return value.toString(); // 当没有对应字典Map时,返回原数据
}
String result = biMap.get(value);
if (ValidateUtil.isNotEmpty(result)) {
return result;
} else {
return value.toString(); // 当没有对应字典值时,返回原数据
}
}
// toCode方法类似,此处不再赘述
标签:return,String,替换,导入,dict,biMap,easypoi,码值,字典
From: https://www.cnblogs.com/saw-/p/17657585.html