You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI 5.2.5中如何修改XSLFTableCell内链接文本的默认颜色?

解决Apache POI 5.2.5中XSLFTableCell超链接文本颜色失效问题

在使用Apache POI 5.2.5的XMLSlideShow生成PPT表格时,若为XSLFTableCell内的文本添加超链接,调用setFontColor设置自定义颜色会被PowerPoint默认的超链接主题样式覆盖,最终显示为默认蓝色。

问题原因

PowerPoint中,超链接文本会默认继承主题里的超链接样式,该样式优先级高于通过POI高层API设置的字体颜色,导致自定义颜色失效。

解决方案

直接操作底层XML元素,强制为超链接文本设置纯色填充颜色,绕过主题样式的覆盖。

修改后的Kotlin代码片段

val tbl = slide.createTable()
tbl.anchor = Rectangle(10, 10, 700, 150)
val tr = tbl.addRow()
val td = tr.addCell()
val p = td.addNewTextParagraph()
val r = p.addNewTextRun()
r.setText("Search")
val link = r.createHyperlink()
link.address = "http://google.com"
r.fontSize = 14.0

// 直接操作XML结构设置自定义颜色
val ctR = r.getCTR()
val rPr = ctR.rPr ?: ctR.addNewRPr()
val solidFill = if (rPr.isSetSolidFill()) rPr.solidFill else rPr.addNewSolidFill()
val srgbClr = if (solidFill.isSetSrgbClr()) solidFill.srgbClr else solidFill.addNewSrgbClr()
srgbClr.val = byteArrayOf(42.toByte(), 198.toByte(), 151.toByte())

代码说明

  1. 通过getCTR()获取文本Run对应的底层XML对象(CTR)
  2. 确保字符属性(rPr)存在,若不存在则创建
  3. 添加或获取纯色填充(solidFill)元素,设置SRGB颜色值(对应目标RGB颜色的字节数组)

内容的提问来源于stack exchange,提问作者Mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:57:33