java poi excel 设置单元格富文本 粗体无效解决办法_poi 设置富文本-CSDN博客
问题描述
需求:java导出excel模板,单元格需要设置字段名+备注,字段名加粗,备注不加粗。
方案:可以采用富文本RichTextString来实现设置部分字体加粗样式。
效果:打开下载的xlsx模板表格,没有展示加粗效果,设置部分标红可以,加粗没有效果。
原因分析
网上查找资料,寻求帮助,看到上述博文,场景确实是wps打开无加粗效果,按照方案进行修改。
解决方案
尝试上述方案,验证成功,不过代码稍微有点不同,第一种是原博文的写法,第二种是最终采用的写法。
List<CTRElt> ctrEltList = hssfRichTextString.getCTRst().getRList();
if(ctrEltList != null && ctrEltList.size()>0){
for(CTRElt ctrElt : ctrEltList){
CTRPrElt ctrPrElt = ctrElt.getRPr();//获取属性元素
if(ctrPrElt != null){
List<CTBooleanProperty> bList = ctrPrElt.getBList();//获取<b/>元素
if(bList != null && bList.size() > 0){
bList.get(bList.size() - 1).unsetVal();//销毁设置的属性值
}
}
}
}
————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xht1351549230/article/details/129934870
上述代码获取List存在报错,NoClassDefFoundError,改为如下数组写法:
CTRElt[] ctrEltArray = hssfRichTextString.getCTRst().getRArray();
if(ctrEltArray != null && ctrEltArray .length >0){
for(int i=0;i<ctrEltArray .length;i++){CTRElt ctrElt = ctrEltArray[i];
CTRPrElt ctrPrElt = ctrElt.getRPr();//获取属性元素
if(ctrPrElt != null){
CTBooleanProperty[] bArray= ctrPrElt.getBArray();//获取<b/>元素
if(bArray!= null && bArray.length > 0){
bArray[bArray.length - 1].unsetVal();//销毁设置的属性值
}
}
}
}
总结
这类疑难杂症,还是对这块底层不了解,奇奇怪怪的问题,感谢大佬,小记一下积累经验,欢迎交流。