概述
从数据库中查询出的数据很多时候都是用字典值表示的(男 -> 1;女 -> 2),所以在 Excel 导出时我们需要将这些字典值转换为与其对应的可读数据(1 -> 男;2 -> 女),具体实现如下
1、定义转换器
StringUtils.equalsAnyIgnoreCase() 在 org.apache.commons.lang3 包下
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency>
以下转换值的操作可按需更改
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
/**
* Excel 字典转换器
*/
public class ExcelDictConverter implements Converter<String> {
// 字典值为 Y/N 的字段
private final String[] dictCodeIsYNArr = {"suitableWorkFlag"};
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
/**
* 导入时将显示值转为字典值
*/
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
// 获取字段名称
String fieldName = excelContentProperty.getField().getName();
// 获取单元格参数
String excelData = cellData.getStringValue();
// 系统字典转换
if (StringUtils.equalsAnyIgnoreCase(fieldName, dictCodeIsYNArr)) {
// 值为 是/否 的字段
excelValue = StrUtil.equals(excelData , "是") ? "Y" : "N";
} else {
// 其他值
excelValue = getdictValue(dict);
}
return dictValue;
}
/**
* 导出时将字典值转为显示值
*/
@Override
public CellData convertToExcelData(String dict, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
// 获取需要转换字典值的字段
Field field = excelContentProperty.getField();
String fieldName = field.getName();
String excelValue = null;
// 字典值转为对应的真实数据
if (StringUtils.equalsAnyIgnoreCase(fieldName, dictCodeIsYNArr)) {
// 字典值为 Y/N 的字段(dict 为字典值)
excelValue = StrUtil.equals(dict, "Y") ? "是" : "否";
} else {
// 其他字典值
excelValue = getExcelValue(dict);
}
return new CellData(excelValue);
}
private String getExcelValue(String dict) {
switch (dict) {
case "1":
return "男";
case "2":
return "女";
case "9":
return "其他";
default:
return dict;
}
}
public String getDictValue(String excelData) {
switch (excelData) {
case "男":
return "1";
case "女":
return "2";
case "其他":
return "9";
default:
return excelData;
}
}
}
2、在实体中使用转换器
@ExcelProperty(value = “XXX”, converter = XxxConverter.class)
@Data
@ColumnWidth(20)
@HeadRowHeight(25)
public class PersonExcelVo {
/**
* 姓名
*/
@ExcelProperty("姓名")
private String name;
/**
* 性别(1男,2女,9其他)
*/
@ExcelProperty(value = "性别", converter = ExcelDictConverter.class)
private String sex;
/**
* 是否适合上岗(Y是,N否)
*/
@ExcelProperty(value = "是否适合上岗", converter = ExcelDictConverter.class)
private String suitableWorkFlag;
}
最后
以上就是温婉香烟为你收集整理的Easy Excel 字典映射的全部内容,希望文章能够帮你解决Easy Excel 字典映射所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复