当前位置: 首页 > news >正文

Java中excel字典转换

✅ 背景说明

EasyExcel 原生的 @ExcelProperty 注解不支持 dictType(不像那样有 @Excel(dictType="xxx")),所以如果你想实现字典翻译功能,就需要自己实现 Converter 接口,比如 DictConvert


✅ 什么是 DictConvert

DictConvert 是你可以 自定义的通用字段转换器类,其核心思想是:

  • 输入参数:字典类型 dictType(比如 "sys_user_status"

  • 行为

    • Java 值 "1" → Excel 中显示 "启用"

    • Excel 显示 "启用" → Java 中变成 "1"


✅ 接口定义

下面是一个典型的 DictConvert 实现

是一个 Excel 导入导出过程中的 数据字典转换器 DictConvert,它是配合 EasyExcel 使用的,用于将 Excel 中的“中文字段”与系统中的“字典值”进行自动双向转换

方向行为说明
Excel → Java中文值 ⇒ 字典编码如 “启用” → "1"
Java → Excel字典编码 ⇒ 中文值如 "1" → “启用”

 并且通过自定义注解 @DictFormat("dictType") 标注字段,让你不需要为每个字段写单独的 Converter

/*** Excel 数据字典转换器** @author 芋道源码*/
@Slf4j
public class DictConvert implements Converter<Object> {@Overridepublic Class<?> supportJavaTypeKey() {throw new UnsupportedOperationException("暂不支持,也不需要");}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {throw new UnsupportedOperationException("暂不支持,也不需要");}@Overridepublic Object convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) {// 使用字典解析String type = getType(contentProperty);String label = readCellData.getStringValue();String value = DictFrameworkUtils.parseDictDataValue(type, label);if (value == null) {log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label);return null;}// 将 String 的 value 转换成对应的属性Class<?> fieldClazz = contentProperty.getField().getType();return Convert.convert(fieldClazz, value);}@Overridepublic WriteCellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) {// 空时,返回空if (object == null) {return new WriteCellData<>("");}// 使用字典格式化String type = getType(contentProperty);String value = String.valueOf(object);String label = DictFrameworkUtils.parseDictDataLabel(type, value);if (label == null) {log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value);return new WriteCellData<>("");}// 生成 Excel 小表格return new WriteCellData<>(label);}private static String getType(ExcelContentProperty contentProperty) {return contentProperty.getField().getAnnotation(DictFormat.class).value();}}

 


✅ 使用方法

你在导出类中这样使用:

@ExcelProperty(value = "状态", converter = UserStatusDictConvert.class) private String status;

或者想进一步封装成通用的用法(多个字段共享)可借助策略或注册器统一配置。


✅ 总结一下

项目说明
名称DictConvert 是自定义的 EasyExcel 通用字段转换器
作用实现字典值与显示名称之间的双向转换
用途用于 Excel 的导入导出字段字典翻译
优点多字段通用、支持动态加载字典(如从 Redis、数据库)

http://www.dtcms.com/a/283647.html

相关文章:

  • Java 设计模式及应用场景
  • RocketMq集群高可用
  • ​​深入理解进程状态:从运行到僵尸​
  • 学习软件测试掌握什么基本知识?
  • 数字经济专业核心课程解析:从理论到实践的学习框架
  • C/C++---rdbuf()函数
  • parallels desktop windows win10无法复制文件无法共享剪切板
  • 利用node.js在本地搭建简易http服务器
  • QT跨平台应用程序开发框架(10)—— Qt窗口
  • 【C#】Vscode中C#工程如何引用自编写的dll
  • React hooks——useReducer
  • 端到端神经网络视频编解码器介绍
  • 神经网络常见激活函数 14-Mish函数
  • AI学习笔记三十二:YOLOv8-CPP-Inference测试(Linux版本)
  • CDSS系统升级“可视化解释-智能反馈-临床语言“三位一体设计架构设计分析
  • 「Chrome 开发环境快速屏蔽 CORS 跨域限制详细教程」*
  • lua(xlua)基础知识点记录二
  • Oracle数据泵详解——让数据迁移像“点外卖”一样简单​
  • 数据库管理-第349期 Oracle DB 23.9新特性一览(20250717)
  • python与正则:前后向断言、分组,以及案例练习
  • Xss-labs 1-8关的初步通关
  • 【Linux系统】进程地址空间
  • 时序数据库选型指南 —— 为什么选择 Apache IoTDB?
  • Qt Quick 粒子系统详解
  • 数据呈现高阶技巧:散点图与桑基图的独特价值
  • 从零开始学 Linux 系统安全:基础防护与实战应用
  • 12.9 Mixtral-8x7B核心技术解密:如何用1/3参数实现4倍推理速度碾压LLaMA2?
  • 取消office word中的段落箭头标记
  • 多方案对比分析:后端数据加密策略及实践
  • 菜单权限管理