EasyExcel的CellWriteHandler注入CellStyle不生效

文章目录

  • 一、问题描述
  • 二、问题排查
  • 三、解决问题

一、问题描述

最近发现原本项目的导出excel功能中,写的那些 CellWriteHandler 去改变样式的代码全都不生效了

二、问题排查

由于代码都是没有改动的,加上最近有升级过 easyExcel 的版本,由原本的 2.2.7 升级到了 3.3.4,版本跨度比较大,所以怀疑是升级导致的问题

于是去 debug跟了下 easyExcel 的源码,我们注册自定义的 CellWriteHandler ,调用的是com.alibaba.excel.write.builder.AbstractExcelWriterParameterBuilder#registerWriteHandler 方法,从这里开始 debug

image-20240517151715797

继续跟进 parameter().getCustomWriteHandlerList().add(writeHandler);

发现是添加到了 WriteBasicParameter 类的成员变量 customWriteHandlerList

image-20240517151842566

点一下 customWriteHandlerList,看看哪些地方用到了这个成员变量的 get 方法

image-20240517152026906

AbstractWriteHolder 里有用到

image-20240517152110049

可以看到,把所有自定义的 handler 全部加到了 handlerList 里,然后调用了 sortAndClearUpHandler 方法,看这个方法名就能看出来,还要对 handler 进行排序和清理,再看下面

image-20240517153206536

还会再加入默认的 writeHandler, 再排序清理一次,看到这里大概可以猜到了,估计我们自定义的 writeHandler,经过排序清理之后,并不在最后,样式估计被后面的 writeHandler 覆盖了,我们看下排序清理后的结果

image-20240517153733567

其中5和6是我们自定义的 writeHandler,下面7,8,9应该是默认的 writeHandler,这3个逐个看了下源码,最终在 FillStyleCellWriteHandler 类里发现确实有覆盖样式的操作,如下图:(ps:原本的2.2.7版本里是没有这个类的)

image-20240517153936295

三、解决问题

要解决问题,很简单,只要让我们自定义的 writeHandler,排序的时候排到 FillStyleCellWriteHandler 后面就可以了

image-20240517154131986

通过类图,我们知道我们自定义的 writeHandler 其实实现了 Order 接口,并且在 Handler 接口里设置了默认值是0

image-20240517154250488

FillStyleCellWriteHandler 的 order 是 50000

image-20240517154308585

所以,只需要实现 order() 方法,并且大于50000即可,加上如下代码即可

@Override
public int order() {return 50001;
}

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

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

相关文章

YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在YOLOv5的GFLOPs计算量中,卷积占了其中大多数的比列,为了减少计算量,研究人员提出了用EfficientNet代替b…

【C++ Boost 开源库 】从安装到运用

1. Boost 开源库的介绍 推荐看下面的博文,就不重复造轮子了 https://blog.csdn.net/qq_44681788/article/details/130895520 2. Boost 开源库下载 这里推荐这个链接,需要的版本只需要改后面的版本号即可 https://boostorg.jfrog.io/artifactory/main…

简述Java虚拟机(JVM)的工作原理

一、技术难点 Java虚拟机(JVM)的工作原理是Java技术体系中的核心部分,其技术难点主要体现在以下几个方面: 跨平台性:JVM是实现Java“一次编写,到处运行”跨平台特性的关键。JVM需要屏蔽与具体操作系统平台…

获得 AI Applied Skills 凭证:微软在线评估认证的注意事项

在你踏上微软的亚洲AI奥德赛之旅,完成基础课程学习后,你可以继续进行相应的评估,在交互式实验室体验中完成一系列任务,通过线上即时评估赢得认证。通过本文的介绍,可以帮助你了解评估认证的一些细节以及注意事项&#…

CSS与表格设计

在网页设计中,表格是一种不可或缺的元素,用于展示和组织数据。虽然HTML提供了基本的表格结构,但通过CSS(层叠样式表)的应用,我们可以极大地提升表格的外观和用户体验。本文将探讨如何利用CSS来设计既美观又…

一般EI论文的格式是什么样的?

论文应该符合会议的提交要求和模板,包括页面格式、字体、字号、行距等。可以在特定会议的官方网站上找到详细的提交指南和模板。 EI会议论文的格式通常遵循以下基本结构: 标题和作者信息:论文标题应该简洁明了,能够准确概括您研究…

ubuntu_概念

su(switch user) wget(Web Get) cd(change directory) dpkg(Debian Packager)为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。 chmod(Change Mode)用于改变文件或目录的权限 ps(Process Status)进程状态 grep(Global Regular Expression Print)…

OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:高效开源的OCR工具:Surya-OCR介绍与使用 1 背景 在众多企业应用中,光学字符识别 (OCR) 是一项基础技术。在本文中&…

qt for android 重新编译Qt6Android.jar

QT相关 编译Qt6Android.jarqt 6.7 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES样式问题APP商店退回用户未点击《用户协议》就启动传感器 编译Qt6Android.jar qt版本&#xff1a;6.7 进入到Qt源码目录 <你的qt目录>\Src\qtbase\src\android\…

MySQL主从复制(二):高可用

正常情况下&#xff0c; 只要主库执行更新生成的所有binlog&#xff0c; 都可以传到备库并被正确地执行&#xff0c; 备库就能达到跟主库一致的状态&#xff0c; 这就是最终一致性。 但是&#xff0c; MySQL要提供高可用能力&#xff0c; 只有最终一致性是不够的。 双M结构的…

Golang:发起http请求-GET带参数、POST发送Form和JSON数据

文档 https://pkg.go.dev/net/httphttps://pkg.go.dev/net/url 目录 1、发起GET请求2、发起带参GET请求3、POST请求提交Form表单4、POST请求提交Json数据5、接收响应数据&#xff0c;json转为map6、自定义请求头 1、发起GET请求 使用net/http 可以很容易发起get请求 package…

python实现nacos服务注册和HTTP探活

如果使用nacos-sdk-python&#xff08;注意适用nacos版本&#xff09;&#xff0c;需要按照下面的链接修改源码的bug https://github.com/nacos-group/nacos-sdk-python/issues/135 代码如下&#xff1a; import nacos import threading import socket import requests impo…

大语言模型调优SFT RLHF

模型调优 大语言模型调优是通过准备训练数据&#xff0c;并在已有的预训练模型上进行调优&#xff0c;包括 llama、千问等模型&#xff0c;从而可以让模型学习到私有知识或者增强模型的已有知识。因此&#xff0c;如果要想训练一个效果好的模型&#xff0c;我们就需要提供大量…

【人工智能】模型性能评估

模型性能衡量介绍 混淆矩阵 混淆矩阵(Confusion Matrix&#xff09; TP(真阳性)&#xff1a;预测为阳性&#xff0c;且预测正确。 TN(真阴性)&#xff1a;预测为阴性&#xff0c;且预测正确。 FP(伪阳性)&#xff1a;预测为阳性&#xff0c;但预测错误&#xff0c;又称型一误…

json文件写操作-下文

接上文json文件写操作 2.4 控制函数长度代码规范版 #include <iostream> #include <string> #include "../3rd/cJSON/cJSON.h" #include "../test_memset/include/ArrayToZero.h"using namespace std;void AddLikeObject(cJSON* interest, c…

【NumPy】关于numpy.reshape()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

实时检测GPU使用率nvidia-smi

nvidia-smi --query-gpuutilization.gpu --formatcsv,noheader,nounits 为了判断所有 GPU 的利用率都小于阈值&#xff0c;可以循环检查每一个 GPU 的利用率。如果所有 GPU 的利用率都低于阈值&#xff0c;则增加空闲时间计数&#xff1b;否则&#xff0c;重置空闲时间计数。 …

python文件名通常以什么结尾

python文件后缀一般有两个&#xff0c;分别是.py和.pyw。视窗用 python.exe 运行 .py&#xff0c;用 pythonw.exe 运行 .pyw 。 这纯粹是因为安装视窗版Python时&#xff0c;扩展名 .py 自动被登记为用 python.exe 运行的文件&#xff0c;而 .pyw 则被登记为用 pythonw.exe 运…

信息系统项目管理师--八大绩效域-度量绩效域

信息系统工程师的八大绩效域包括&#xff1a;干系人、团队、开发方法和生命周期、规划、项目工作、交付、度量、不确定性。 度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能。 预期目标 对项目状况充分理解数据充分、可支持决策及时采取行动&#xff0c;确保项目最…

[程序员] 最近的感悟,错误处理占大头?

根据昨天分享的一个问题&#xff0c;想到的。 在代码里&#xff0c;异常处理的代码也算是占大头&#xff0c;扑面而来的就是发生错误时怎么处理的大片代码&#xff1b;而且出现问题的概率是绝对的占大头。所以&#xff0c;异常代码出现bug的概率也在不知不觉中增加&#xff01…