poi excel 设置单元格富文本 粗体 斜体 无效处理

原因:

poi版本 4.1.2

设置RichTextString 的时候,给 font 设置  setBold(true) ; setItalic(true)  粗体 斜体 ,发现在office有效果,在wps 看不到加粗斜体效果。后来在电脑上wps新建的xlsx和程序生成的xlsx解压,对比sharedString.xml文件发现,电脑的生成的xlsx的加粗斜体是

<b/>
<i/>

而程序生成的加粗斜体是

<b val="true"/>
<i val="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> CTRElt = richTextString.getCTRst().getRList();
        if(CTRElt != null && CTRElt.size()>0){
            ctrElt = CTRElt.get(CTRElt.size() - 1).getRPr();
            if(ctrElt != null){
                List<CTBooleanProperty> d = ctrElt.getBList();
                if(d != null && d.size() > 0){
                    d.get(d.size() - 1).unsetVal();
                }
            }

        }
    }
    if(excelStyle.getFont().isItalic()){
        if(ctrElt == null){
            List<CTRElt> CTRElt = richTextString.getCTRst().getRList();
            if(CTRElt != null && CTRElt.size()>0){
                ctrElt = CTRElt.get(CTRElt.size() - 1).getRPr();
            }
        }
        if(ctrElt != null){
            List<CTBooleanProperty> d = ctrElt.getIList();
            if(d != null && d.size() > 0){
                d.get(d.size() - 1).unsetVal();
            }
        }
    }
}

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值