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

EasyExcel的CellWriteHandler注入CellStyle不生效(转)

文章目录
一、问题描述
二、问题排查
三、解决问题
一、问题描述
最近发现原本项目 的导出excel功能中,写的那些 CellWriteHandler 去改变样式的代码全都不生效了

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

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

 

image

 

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

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

 

image

 

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

 

image

 

在 AbstractWriteHolder 里有用到

 

image

 

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

 

image

 

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

 

image

 

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

 

image

 

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

 

image

 

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

 

image

 

而 FillStyleCellWriteHandler 的 order 是 50000

 

image

 

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

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

————————————————
版权声明:本文为CSDN博主「每天进步亿点点的小码农」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dongdong199033/article/details/139008025

http://www.jsqmd.com/news/645796/

相关文章:

  • 【仅剩47席】SITS2026认证AI音乐工程师速成计划:7天掌握模型微调、商业授权嵌入与实时渲染部署
  • 清音刻墨Qwen3入门指南:3步生成专业级字幕,无需任何技术背景
  • 云原生架构设计模式
  • 2026年云南企业财税一体化服务深度测评:从注册到注销的全生命周期合规方案 - 精选优质企业推荐榜
  • RAG 与 MCP:每位 AI 开发人员都必须了解的架构差异
  • 2026年淘宝代运营公司哪家好?天猫京东拼多多抖音全平台服务商推荐 - 深度智识库
  • 2026年别墅移动阳光房厂家最新排名榜单 - 品牌策略师
  • ArduRemoteID开源无人机身份识别系统:架构设计与实战指南
  • Windows 11任务栏拖放功能修复:从缺失到重生的技术演进之路
  • 修改员工-查询回显
  • 2026年昆明企业财税全生命周期服务完全指南:今非企管官方联系方式与行业权威横评 - 精选优质企业推荐榜
  • 从数据丢失到稳定传输:我是如何用硬件流控拯救蓝牙文件传输项目的
  • ASMR下载神器:5分钟搞定asmr.one音频资源自动化管理
  • CRM系统应该如何选择?五大主流销售管理CRM深度测评与选型指南 - SaaS软件-点评
  • 如何在Python中轻松处理字体文件?fontTools全面指南
  • SAP RAP开发避坑指南:Locking和Numbering实战中那些容易踩的雷
  • 2026年云南昆明企业工商财税一站式服务深度横评:全生命周期合规托管与降本增效方案对比 - 精选优质企业推荐榜
  • 多语言国际化网站解决方案
  • 3分钟掌握Obsidian加密插件:保护你的数字隐私笔记
  • 贵州震华娘子军家政:家政服务与月嫂公司的专业化实践 - 深度智识库
  • 系统启动过程引导加载器与内核初始化
  • 接口突然变慢别急着看数据库,这篇复盘把排查路径讲透了
  • 从‘三重循环’到‘一维数组’:手把手带你优化完全背包的C++代码(附LeetCode实战)
  • 用 Python 批量清洗参考文献数据,省掉手工整理时间
  • 2026 想找上海优质普拉提培训?这些靠谱机构值得推荐 - 品牌2025
  • 冥想对编码质量的影响:科学验证
  • 别再自己写加法器了!聊聊Synopsys DesignWare IP库如何帮你搞定复杂时序难题
  • 2026年云南昆明企业工商财税一站式服务深度横评:如何选择合规高效的代理记账与资质代办机构 - 精选优质企业推荐榜
  • Ultimate ASI Loader:Windows游戏插件加载器的完整指南
  • 从‘无法连接’到成功远程:Windows 10神州网信版远程桌面排错全记录