news 2026/4/24 12:59:22

使用EasyExcel对某列做特定样式,样式失效

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用EasyExcel对某列做特定样式,样式失效

简单说两句

✨ 少壮不努力,老大加班加到让你怀疑人生!!!

作者:银氨溶液

CSDN个人主页:银氨溶液

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

场景浅尝

最近,我正在做一个导出excel的需求,这个需求里面有一点要求对excel里面的某列做特定的样式展示,好,就这一句话,我的噩梦开始了~

问题追溯

我对某列做特定样式修改后,无论我使用什么样的方法,最后的excel文件里面这行样式依旧没有任何改变

可以先看一下伪代码:

// 1. EasyExcel 开始写数据 for (row in data) { for (col in columns) { Cell cell = createCell(row, col); // 2. 你的自定义 Handler 处理某一列 if (col == targetCol) { // 你设置了自己的样式 CellStyle myStyle = buildHyperlinkStyle(workbook); cell.setCellStyle(myStyle); cell.setHyperlink(hyperlink); } } } // 3. EasyExcel 内部的样式策略开始生效 for (row in allRows) { for (col in allColumns) { Cell cell = getCell(row, col); // EasyExcel统一覆盖内容区域的样式 CellStyle contentStyle = buildContentStyle(workbook); cell.setCellStyle(contentStyle); // 这一步把你之前设置的样式覆盖掉了 } } // 4. 文件写出 writeExcelFile();

其实原因很简单,我这儿是因为有一个全局的样式覆盖了我之前对某个列单独做的样式,就算是你把自定义的handler放到统一样式后面去处理,其实也会被覆盖,因为EasyExcel 并不是按“注册顺序”严格执行所有 Handler

举个通俗的比喻

你用 POI 原生 setCellStyle,就像在 Excel 里手动给每个格子调样式,但有别人在后面又给你批量“刷回去”,你就白忙活了。

解决办法

所以解决办法其实也很简单,既然始终会被覆盖,那就在全局样式处理完之后,再单独去对这列做样式处理,所以直接使用EasyExcel的样式体系来处理,来看伪代码:

// 推荐做法 for (row in data) { for (col in columns) { Cell cell = createCell(row, col); if (col == targetCol) { // 用 EasyExcel 的样式体系(WriteCellStyle) WriteCellData cellData = getCellData(cell); WriteCellStyle myStyle = new WriteCellStyle(); myStyle.setWriteFont(蓝色下划线字体); cellData.setWriteCellStyle(myStyle); cell.setHyperlink(hyperlink); } } } // EasyExcel 最后统一应用所有 WriteCellStyle,不会覆盖你自定义的

什么是 WriteCellStyle?

WriteCellStyle是 EasyExcel 提供的一个“样式描述对象”,
你可以把它理解为「描述 Excel 单元格样式的模板」,比如字体、颜色、下划线、居中、边框等。

它不是 POI 的 CellStyle 对象,也不是直接应用到 Excel 的样式,
而是 EasyExcel 用来收集每个单元格想要什么样式
等到所有数据都写完时,EasyExcel 会自动帮你把这些样式应用到对应的单元格上。

为什么 WriteCellStyle 能实现你想要的效果?

EasyExcel 的样式覆盖机制:

  • EasyExcel 会收集所有的 WriteCellStyle(你可以通过 Handler 或策略写到 WriteCellData 里)

  • 最后统一遍历所有单元格,把 WriteCellStyle 转成 POI 的 CellStyle,一起应用到 Excel 文件

  • 这样就能保证你的自定义样式不会被其他策略覆盖掉

【都看到这了,点赞加关注,收藏不迷路呀~】😚😚

💬

✨ 一直努力让自己发光发亮的银氨啊~💖 爱生活,更爱分享,分享各种学习干货!🌈 感谢关注,关注了你就是我的超级粉丝啦!🔒 以下内容仅对你可见~

作者:银氨溶液

CSDN个人主页:银氨溶液

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 15:53:48

基于51单片机的简易电子琴设计

基于51单片机的简易电子琴设计 一、设计背景与意义 电子琴作为普及性乐器,凭借音色丰富、操作便捷等优势,广泛应用于音乐教学与日常娱乐场景。传统电子琴多为独立设备,体积较大且成本较高,而基于单片机的简易电子琴具有体积小巧、…

作者头像 李华
网站建设 2026/4/20 18:38:17

C++精灵库二叉树四种遍历算法可视化遍历程序

C精灵库二叉树四种遍历算法可视化程序本程序实现了二叉树的四种遍历实现: 前序遍历:根→左→右 中序遍历:左→根→右 后序遍历:左→右→根 层序遍历(BFS):按层级从左到右访问 这个程序非常生动…

作者头像 李华
网站建设 2026/4/20 12:50:24

基于eNSP的校园网络规划设计与仿真

友善提示 支持JAVA、Python、大数据专业、小程序、PHP、APP、ASP.NET、Node.js、Vue、数据分析、可视化、推荐系统等各类系统定做,您出题目,我们按需求定做。或者我们出相关的选题,并定做系统都支持… 博主简介 作者简介:Java领…

作者头像 李华
网站建设 2026/4/20 18:02:15

macOS Java 多版本环境配置完全指南

macOS Java 多版本环境配置完全指南 📋 目录 问题背景解决方案概览详细配置步骤常见问题解决最佳实践建议 问题背景 在 macOS 上开发 Java 项目时,经常需要同时维护多个不同版本的 Java 环境。例如: 旧项目使用 JDK 8较新项目使用 JDK 1…

作者头像 李华
网站建设 2026/4/21 9:06:17

基于STM3251的多功能车位锁设计 51/STM32单片机原理图PCB毕业设计指导

友善提示 支持JAVA、Python、大数据专业、小程序、PHP、APP、ASP.NET、Node.js、Vue、数据分析、可视化、推荐系统等各类系统定做,您出题目,我们按需求定做。或者我们出相关的选题,并定做系统都支持… 博主简介 作者简介:Java领…

作者头像 李华
网站建设 2026/4/20 13:53:09

【课程设计/毕业设计】基于微信小程序的4S店试驾平台基于springboot的4S店试驾平台小程序【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华