【RuoYi-Vue-Plus】学习笔记 49 - Easy Excel(三)自定义转换器 ExcelDictConvert 源码分析
创始人
2024-05-30 21:42:08
0

文章目录

    • 前言
    • 参考目录
    • 框架集成
      • 1、Maven
      • 2、框架集成模块 `ruoyi-common-excel`
      • 2.1、自定义转换器 `ExcelDictConvert`
      • 2.2、自定义转换器注解 `ExcelDictFormat`
      • 2.3、Excel 工具类 `ExcelUtil`
      • 3、测试方法
      • 3.1、用户导入
      • 3.2、用户导出
      • 3.3、测试调用流程说明
    • 执行流程分析
      • 1、用户导出流程分析
      • 1.1、方法调用链
      • 1.2、性别字段转换分析(使用字典解析)
      • 1.3、用户状态字段转换分析(使用表达式解析)
      • 1.4、导出结果
      • 2、用户导入流程分析
      • 2.1、方法调用链
      • 2.2、性别字段转换分析(使用字典解析)
      • 2.3、用户状态字段转换分析(使用表达式解析)
      • 1.5、导入结果

前言

在前两天测试新的 Easy Excel 自定义转换器 ExcelEnumConvert 时才发现之前没有分析过这一部分的功能,所以本篇来介绍一下框架中另外一个比较有代表性的自定义转换器 ExcelDictConvert

自定义转换器在实际应用中也比较常见。举个栗子,某些字段值在数据库中使用诸如 012 这样的枚举值进行存储,而在 Excel 导入导出功能中,则需要对这些特定的字段进行转换,这时就需要使用自定义转换器进行转换,解析出所需要的值。

下面本文就以导入导出为例对这一功能进行说明,其他的自定义转换器也是类似的实现方式,感兴趣的朋友可以自行研究。

参考目录

  • Easy Excel 官方文档 - 自定义转换器

框架集成

1、Maven

  • 框架分支:5.X
    (注:在框架 4.Xdev)分支也有该功能,只是文件目录不同)
  • Easy Excel 版本:V3.2.0
  • poi 版本:V5.2.3

2、框架集成模块 ruoyi-common-excel

由于在框架 5.X 分支中对框架目录进行了重构,所以与 Excel 相关的功能被单独抽成了一个公共模块,方便使用。

在这里插入图片描述

关于本文自定义转换器功能所涉及的类分别是:

  • 核心实现类 ExcelDictConvert
  • 注解类 ExcelDictFormat
  • 工具类 ExcelUtil

2.1、自定义转换器 ExcelDictConvert

在这里插入图片描述

实现字典值转换功能的核心类,实现了 Easy Excel 的 com.alibaba.excel.converters.Converter 接口。

按照官方文档,要实现自定义转换器的功能很简单,只需要实现 Converter 接口并实现指定类即可。

在这里插入图片描述

com.alibaba.excel.converters.Converter

由上图源码,右侧黄色背景的类都是 Easy Excel 已经实现的转换器,都是常见类型的转换器。

需要实现的方法如下:

com.alibaba.excel.converters.Converter#convertToJavaData
在这里插入图片描述

com.alibaba.excel.converters.Converter#convertToExcelData
在这里插入图片描述

框架中的实现方法如下:

在这里插入图片描述

2.2、自定义转换器注解 ExcelDictFormat

在这里插入图片描述

通过在对象字段上标注该注解实现转换功能,框架中定义了两种解析方式:字典类型解析 以及 表达式解析,后者可以自定义分隔符。

2.3、Excel 工具类 ExcelUtil

在之前的导入分析文章中也有涉及到这个类,这个类封装了常用的 Excel 处理方法,本文涉及到的方法有两个:convertByExp 以及 reverseByExp。这两个方法逻辑类似,理解了其中一个,另一个也能够理解。

ExcelUtil#convertByExp
在这里插入图片描述

ExcelUtil#reverseByExp
在这里插入图片描述

3、测试方法

3.1、用户导入

SysUserController#importData
在这里插入图片描述

SysUserImportVo
在这里插入图片描述

3.2、用户导出

SysUserController#export
在这里插入图片描述

SysUserExportVo
在这里插入图片描述

3.3、测试调用流程说明

本文的测试流程如下:

  1. 由于转换器的实现方法分别对应 读 Excel (导入)和 写 Excel(导出),所以分两次进行调用。
  2. 调用导出方法。
  3. 使用导出方法得到的 Excel 表格结果进行修改后,调用导入方法。
  4. 为了更好地说明不同的解析方法,所以对于相关转换字段的导入导出方法都进行了分析。
  5. 导入导出方法的转换功能差异不大,所以只要理解了一个,另一个也能够理解。

执行流程分析

本文的分析重点集中在实现方法的核心类,对于中间的调用流程不会展开详细说明。

1、用户导出流程分析

在这里插入图片描述

SysUserController#export
在这里插入图片描述

ExcelUtil#exportExcel
在这里插入图片描述

ExcelUtil#exportExcel
在这里插入图片描述

ExcelWriterSheetBuilder#doWrite
在这里插入图片描述

1.1、方法调用链

从框架工具类到转换器经过的调用链如下:

在这里插入图片描述

然后就是核心方法 ExcelDictConvert#convertToExcelData

1.2、性别字段转换分析(使用字典解析)

ExcelDictConvert#convertToExcelData
在这里插入图片描述

该方法的主要逻辑如下图:

在这里插入图片描述

SysDictTypeServiceImpl#getDictLabel
在这里插入图片描述

1.3、用户状态字段转换分析(使用表达式解析)

ExcelDictConvert#convertToExcelData
在这里插入图片描述

ExcelUtil#convertByExp
在这里插入图片描述

解析的结果:
在这里插入图片描述

1.4、导出结果

在这里插入图片描述

2、用户导入流程分析

P.S. 对于导入流程,在之前的文章中分别以 Excel 2003 版本 以及 2007 版本 为例进行了详细说明,感兴趣的朋友可以回头看看。

导入的数据:(根据前面导出的结果简单修改)

在这里插入图片描述

导入操作:
在这里插入图片描述

在这里插入图片描述

SysUserController#importData
在这里插入图片描述

ExcelUtil#importExcel
在这里插入图片描述

2.1、方法调用链

在这里插入图片描述

2.2、性别字段转换分析(使用字典解析)

ExcelDictConvert#convertToJavaData
在这里插入图片描述

SysDictTypeServiceImpl#getDictValue
在这里插入图片描述

最终转换结果:

在这里插入图片描述

2.3、用户状态字段转换分析(使用表达式解析)

ExcelDictConvert#convertToJavaData
在这里插入图片描述

ExcelUtil#reverseByExp
在这里插入图片描述

在这里插入图片描述

1.5、导入结果

在这里插入图片描述

用户列表:

在这里插入图片描述

用户详情:

在这里插入图片描述

以上是关于自定义转换器的流程分析。

(完)

相关内容

热门资讯

重磅!一线城市房地产调控全面松... 一线城市房地产调控全面松绑,释放购房新信号2025 年,房地产市场风云突变,一则重磅消息如惊雷般响彻...
晶科能源携多款创新光储方案亮相... 转自:证券日报网    本报记者 曹琦    6月11日至13日,第十八届(2025)国际太阳能光伏...
“山有木兮卿有意,昨夜星辰恰似... “山有木兮卿有意,昨夜星辰恰似你”是什么意思?“山有木兮卿有意,昨夜星辰恰似你”的意思是“我对你有意...
股权转让+增资 日联科技拿下... 转自:证券日报网    本报记者 李亚男    6月13日晚间,日联科技集团股份有限公司(以下简称“...
一个人开什么店好,两万块开什么... "劳动人民、劳动灵魂和劳动都是人."这在去年开始流行,所有工作的人都拿他们的工作开玩笑。经过几十年的...
杭州市城区周边哪里有菜地(旱地... 杭州市城区周边哪里有菜地(旱地)或山地租?我想租个几亩种种?若有,大概要多少钱一亩?杭州市城北郊区就...
西湖不欢迎“粗暴的手” 转自:中国环境网近日,“杭州西湖石刻有人拔断松鼠尾巴”一事引起了网友们的关心和讨论。对此,西湖水域管...
吕姓股民向普利退发起索赔 许峰...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...
家里有几个多事的大姑姐怎么办 家里有几个多事的大姑姐怎么办其实只要心态放平一点就好了,家里的大姑姐平常也没有什么事情做,所以只能聊...
贝尔计划赛季末重返皇马,贝尔重... 贝尔计划赛季末重返皇马,贝尔重回皇马的主要原因有哪些?齐达内让他进入首发,不是信任,而是希望在今年夏...
名侦探柯南为什么会有快兰的说法 名侦探柯南为什么会有快兰的说法你可以去看剧场版十四天空中的遇难船的1分30秒的预告片里面有……小兰和...
求跟侠岚类型的动画片 求跟侠岚类型的动画片《千年寻》一样!
刘备为何不踏实治理好夺取的荆州... 刘备为何不踏实治理好夺取的荆州四郡,而是非要借南郡?因为南郡的地理位置太过于紧要,是荆州四郡的门户,...
问道手游70套装怎么做 问道手... 问道手游70套装怎么做 问道手游70级极品套装打造步骤全面解析首先来说的第一个问题 套装是由超级...
苏超第四轮燃爆,网友:小龙虾大... 格隆汇6月14日|据央视财经,在苏超第四轮赛事中,淮安队将迎战南京队,被大家调侃是“小龙虾”与“盐水...
卓驭科技CEO沈劭劼:智能驾驶...   2025第十七届轩辕汽车蓝皮书论坛于2025年6月13日-15日在广州举行。卓驭科技CEO沈劭劼...
倾世王妃的繁体字怎么写的啊 倾世王妃的繁体字怎么写的啊倾世皇妃__倾世皇妃倾世王妃差别就在第一个字
羊城夏夜上演“粤乐新唱·潮挞非... 中新网广州6月14日电 (程景伟 文瑶)当高胡的悠扬遇见架子鼓的爆裂,当粤剧的锣鼓铿锵与贝斯的低沉吟...
前5月我国人民币贷款增加10.... 转自:中工网人民日报海外版北京6月13日电(记者徐佩玉)中国人民银行13日发布的金融统计数据显示,前...
光纤宽带机房为什么有尖叫声 光纤宽带机房为什么有尖叫声呵呵,主板设备,交换机里面有很多小的散热风扇,你听到的声音应该是风扇的声音...