【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、导入结果

在这里插入图片描述

用户列表:

在这里插入图片描述

用户详情:

在这里插入图片描述

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

(完)

相关内容

热门资讯

中国铁建全资子公司新增一项62... (转自:快查一企业中标了)快查APP显示,中国铁建相关公司中国铁建大桥工程局集团有限公司于2025年...
巴西总统抨击特朗普关税威胁 转自:财联社【巴西总统抨击特朗普关税威胁】财联社7月8日电,据CCTV国际时讯报道,巴西总统卢拉当地...
北京大北农科技集团股份有限公司...   证券代码:002385证券简称:大北农               公告编号:2025-060 ...
孕36周遭遇心血管“旋风炸弹”... 转自:天津日报  怀孕36周的准妈妈王女士遭遇有心血管“旋风炸弹”之称的主动脉夹层,天津医科大学第二...
12月4日小胖闯非洲在尼泊尔出... 12月4日小胖闯非洲在尼泊尔出什么事了小胖在尼泊尔直播的时候被杀身亡了12月4日,小胖闯非洲在尼泊尔...
牛为什么要吃草?要求科学解释? 牛为什么要吃草?要求科学解释?提示:为什么牛不搞光合作用,为什么牛不吃肉(自然为什么这么选择)?为什...
现在有什么好看的玄幻小说,要好... 现在有什么好看的玄幻小说,要好看的?类似斗破苍穹。神墓的!盘龙 我看过 挺好的
重庆燃气相关公司新增一项331... (转自:快查一企业中标了)快查APP显示,重庆燃气相关公司重庆渝西天然气管道有限公司于2025年7月...
小亭子连接职场“大舞台” 转自:光明日报  临近暑假,东北师范大学学生就业指导服务中心大厅里,两座AI面试亭依然“座无虚席”,...
从“被动养老”到“主动健康” 转自:光明日报  日前,在位于福建省厦门市嘉莲街道友邻中心的智慧健身房里,70岁的居民张凯明正对着镜...