poi版本 4.1.2
设置RichTextString 的时候,给 font 设置 setBold(true) ; setItalic(true) 粗体 斜体 ,发现在office有效果,在wps 看不到加粗斜体效果。后来在电脑上wps新建的xlsx和程序生成的xlsx解压,对比sharedString.xml文件发现,电脑的生成的xlsx的加粗斜体是
- <b/>
- <i/>
而程序生成的加粗斜体是
- "true"/>
- "true"/>
程序生成的标签里多了属性val,手工删除属性替换,再以xslx表格打开,发现就有效果了
现在知道了原因了,就查看代码处理代码不生成这个属性就好了
方法1、简单粗暴
重写RIchTextString的以下两个方法,这两个方法除了被注释的地方改写,其他地方和父类XSSFRichTextString的一样,使用的时候就使用重写的RichTextString,并且调用append方法设置内容以及对应字体样式
方法2、其实就是 方法1中提到的append设置之后把属性抹去
- richTextString.applyFont(index, endIndex, font);
- CTRPrElt ctrElt = null;
- if(excelStyle.getFont() != null){
- if(excelStyle.getFont().isBold()){
- List
CTRElt = richTextString.getCTRst().getRList(); - if(CTRElt != null && CTRElt.size()>0){
- ctrElt = CTRElt.get(CTRElt.size() - 1).getRPr();
- if(ctrElt != null){
- List
d = ctrElt.getBList(); - if(d != null && d.size() > 0){
- d.get(d.size() - 1).unsetVal();
- }
- }
-
- }
- }
- if(excelStyle.getFont().isItalic()){
- if(ctrElt == null){
- List
CTRElt = richTextString.getCTRst().getRList(); - if(CTRElt != null && CTRElt.size()>0){
- ctrElt = CTRElt.get(CTRElt.size() - 1).getRPr();
- }
- }
- if(ctrElt != null){
- List
d = ctrElt.getIList(); - if(d != null && d.size() > 0){
- d.get(d.size() - 1).unsetVal();
- }
- }
- }
- }