核心内容摘要
Fish Speech 1.5效果对比评测:vs VITS、Coqui TTS、Edge-TTS自然度分析
⭐简单说两句⭐✨ 少壮不努力老大加班加到让你怀疑人生作者银氨溶液CSDN个人主页银氨溶液欢迎关注点赞收藏⭐️留言场景浅尝最近我正在做一个导出excel的需求这个需求里面有一点要求对excel里面的某列做特定的样式展示好就这一句话我的噩梦开始了~问题追溯我对某列做特定样式修改后无论我使用什么样的方法最后的excel文件里面这行样式依旧没有任何改变可以先看一下伪代码//
EasyExcel 开始写数据 for (row in data) { for (col in columns) { Cell cell createCell(row, col); //
你的自定义 Handler 处理某一列 if (col targetCol) { // 你设置了自己的样式 CellStyle myStyle buildHyperlinkStyle(workbook); cell.setCellStyle(myStyle); cell.setHyperlink(hyperlink); } } } //
EasyExcel 内部的样式策略开始生效 for (row in allRows) { for (col in allColumns) { Cell cell getCell(row, col); // EasyExcel统一覆盖内容区域的样式 CellStyle contentStyle buildContentStyle(workbook); cell.setCellStyle(contentStyle); // 这一步把你之前设置的样式覆盖掉了 } } //
文件写出 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不会覆盖你自定义的什么是 WriteCellStyleWriteCellStyle是 EasyExcel 提供的一个“样式描述对象”你可以把它理解为「描述 Excel 单元格样式的模板」比如字体、颜色、下划线、居中、边框等。
它不是 POI 的 CellStyle 对象也不是直接应用到 Excel 的样式而是 EasyExcel 用来收集每个单元格想要什么样式等到所有数据都写完时EasyExcel 会自动帮你把这些样式应用到对应的单元格上。
为什么 WriteCellStyle 能实现你想要的效果EasyExcel 的样式覆盖机制EasyExcel 会收集所有的 WriteCellStyle你可以通过 Handler 或策略写到 WriteCellData 里最后统一遍历所有单元格把 WriteCellStyle 转成 POI 的 CellStyle一起应用到 Excel 文件这样就能保证你的自定义样式不会被其他策略覆盖掉【都看到这了点赞加关注收藏不迷路呀~】✨ 一直努力让自己发光发亮的银氨啊~ 爱生活更爱分享分享各种学习干货 感谢关注关注了你就是我的超级粉丝啦 以下内容仅对你可见~作者银氨溶液CSDN个人主页银氨溶液欢迎关注点赞收藏⭐️留言