我是靠谱客的博主 温婉香烟,最近开发中收集的这篇文章主要介绍Easy Excel 字典映射,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

从数据库中查询出的数据很多时候都是用字典值表示的(男 -> 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 字典映射所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部