【RuoYi-Vue-Plus】学习笔记 49 - Easy Excel(三)自定义转换器 ExcelDictConvert 源码分析

news2025/7/9 14:20:34

文章目录

    • 前言
    • 参考目录
    • 框架集成
      • 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、导入结果

在这里插入图片描述

用户列表:

在这里插入图片描述

用户详情:

在这里插入图片描述

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

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dynamics 365如何动态设置表单上字段标签label的tooltips提示语。

客户要求定制一下光标放在字段标签上的tooltips提示语言。如果是静态的,可以去后台实体字段编辑页面直接修改字段的描述信息即可。 但是这里要求改成动态的显示形式:“ABC”当前用户当前时间的yyyyMMddHHmm格式的字符串。 表单onload中调用的JS函数Rese…

第十四届蓝桥杯第三期模拟赛B组C/C++原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

centos7 oracle19c安装 ORA-01012: not logged on

总共分三步 1.下载安装包:里面有一份详细的安装教程 链接:https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码:8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…

Java介绍,什么是Java?

同学们好! 第一次接触软件行业吗?没有关系,看完这篇介绍让你了解到底什么是Java?并对它强大的功能所吸引。希望你能耐心的看完,更了解软件行业,了解Java开发。 1、是不是不知道什么是Java? 官…

港科夜闻|沈向洋教授获委任为香港科大校董会主席

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、沈向洋教授获委任为香港科大校董会主席。该委任由2023年3月6日起生效,为期3年。沈教授将接替现任校董会主席廖长城先生。而廖先生亦于今天获委任为大学最高咨询机构「顾问委员会」的新一任主席,接替成…

pandas数据分析(二)

文章目录DataFrame数据处理与分析读取Excel文件中的数据筛选符合特定条件的数据查看数据特征和统计信息按不同标准对数据排序使用分组与聚合对员工业绩进行汇总DataFrame数据处理与分析 部分数据如下 这个数据百度可以搜到,就是下面这个 读取Excel文件中的数据 …

JVM实战OutOfMemoryError异常

目录 Java堆溢出 常见原因: 虚拟机栈和本地方法栈溢出 实验1:虚拟机栈和本地方法栈测试(作为第1点测试程序) 实验2:(作为第1点测试程序) 运行时常量池和方法区溢出 运行时常量池内存溢出 …

模型压缩技术综述

当今,随着深度学习技术的不断进步,越来越多的大型多模态模型被应用于自然语言处理、计算机视觉等领域。然而,这些模型往往需要数十亿甚至上百亿的参数,不仅训练时间长、计算资源消耗大,而且在实际应用中也会受到硬件、…

android sdk分析工具uiautomatorviewer.bat启动报错

位于android sdk目录android-sdk\tools\bin下的分析工具uiautomatorviewer.bat启动报错: uiautomatorviewer.bat -Djava.ext.dirs..\lib\x86_64;..\lib is not supported. Use -classpath instead. Error: Could not create the Java Virtual Machine. Error: A fa…

20张图带你彻底了解ReentrantLock加锁解锁的原理

哈喽大家好,我是阿Q。 最近是上班忙项目,下班带娃,忙的不可开交,连摸鱼的时间都没有了。今天趁假期用图解的方式从源码角度给大家说一下ReentrantLock加锁解锁的全过程。系好安全带,发车了。 简单使用 在聊它的源码…

浅谈Spring6之P和C命名空间注入的区别

基于P命名空间注入 P命名空间注入是简化构造方法的注入 使用P命名空间注入的两个条件 一&#xff1a;xmlns:p"http://www.springframework.org/schema/p" 二&#xff1a;提供set方法class类 Spring_p.xml配置<!--P命名注入底层是set注入><bean id"dogB…

anaconda的linux版本以及jupyter的安装和DataSpell连接linux的jupyter服务器

anaconda安装&#xff1a;官网&#xff1a;https://www.anaconda.com/拷贝下载网址后&#xff0c;在Linux里进行下载&#xff1a;wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh执行sh&#xff1a;./Anaconda3-2022.10-Linux-x86_64.sh 安装完后&a…

webpack指南(优化篇)——webpack项目优化

系列文章目录 webpack指南&#xff08;基础篇&#xff09;——手把手教你配置webpack 文章目录系列文章目录前言一、概述二、传输性能优化1.代码压缩1.1 css压缩1.2 js压缩1.3 进一步压缩js1.4 压缩html1.5图片压缩2.摇树优化(Tree Shaking)3.作用域提升4.抽取公共模块&#x…

python+selenium自动化测试解决不了的alert问题,使用PyKeyboard解决方法

在python自动化测试中&#xff0c;面对浏览器弹出的对话框&#xff0c;python自带的alert可能解决不了关闭弹框&#xff0c;这时候可以引入PyKeyboard来解决下载并安装pyHook-1.5.1-cp36-cp36m-win_amd64.whl&#xff0c;下载地址https://www.lfd.uci.edu/~gohlke/pythonlibs/&…

你需要知道的云计算常识

云计算常识_基础阶段云计算服务器架构的演进云计算能够提供什么价值&#xff1f;谁为云计算提供服务&#xff1f;计算机的组成部分进制转换云计算 服务器架构的演进 Mon 06Mon 13Mon 20裸金属 虚拟机 云主机(云平台) 容器&#xff08;云原生&#xff09; serviceless(无服务) …

基于VC+MSSQL开发的医院PACS系统全套源代码 强大的三维重建功能

医院PACS系统源码 PACS源码 一套医学影像存储与传输系统&#xff0c;PACS部分主要提供医学影像获取、影像信息网络传递、大容量数据存储、影像显示和处理、影像打印等功能。RIS主要提供分诊登记、叫号、检查报告生成和打印等功能。本套影像存储与传输系统将二者进行无缝对接&a…

CHAPTER 4 文件共享 - Samba

文件共享 - Samba1 Samba1.1 Samba的软件架构1.2 搭建Samba服务器1.3 samba用户管理1. 添加用户2. 修改用户密码3. 删除用户和密码4. 查看samba用户列表5. 查看samba服务器状态1.4 samba共享设置&#xff08;配置文件详解&#xff09;1.5 访问共享目录1. windows访问2. linux客…

机智云目前我用过最便捷的物联网快速开发方案

GE211 MINI DTU上手来看&#xff0c;是一款尺寸比较小巧的模块&#xff0c;适合放置在几乎所有白色家电中&#xff0c;通过ph2.0端子&#xff08;注意不要买错&#xff09;引出了5v、gnd、tx、rx。可以说是非常方便了。下面正式开始我们的接入流程&#xff1a;首先注册一个机智…

PPC902AE101 3BHE010751R0101

PPC902AE101 3BHE010751R0101PPC902AE101 3BHE010751R0101PLC脉冲量的控制目的主要是位置控制、运动控制、轨迹控制等。例如&#xff1a;脉冲数在角度控制中的应用。步进电机驱动器的细分是每圈10000&#xff0c;要求步进电机旋转90度。 那么所要动作的脉冲数值10000/(360/90)2…

如果读了我2011年求职前端开发的酸爽经历,希望你可以鼓起勇气继续向前

今年是2023年&#xff0c;如果你觉得今年找工作很难&#xff0c;狗哥回忆了一下2011年求职前端开发工作的酸爽经历&#xff0c;希望你读了以后可以鼓起勇气&#xff0c;不要迷茫&#xff0c;简历投出去石沉大海的&#xff0c;需要改简历的就赶紧改&#xff0c;刷题不到位的就赶…