poi导出word文章参考及word打不开、word替换不成功

本文参考地址:https://blog.csdn.net/wangxiaoyingWXY/article/details/95377533

本文参考地址:https://blog.csdn.net/u014427811/article/details/100771314#comments

感谢大佬们的详解

1、目前遇到的问题是当修改文档内的图表,导出的文档微软office打不开,wps却可以。我得是因为添加图例出问题了所以打不开。

建议定位出问题的地方,比如我定位到更换图表打不开之后定位到了具体是图例出了问题。记录一下也给大家一个参考。

------------------------------------------------------------追加解决方式------------------------------------------------------------------------------

 

定位到是刷新内置excel有问题,我直接注释掉了。图表能显示 word也可以用微软打开了。。。

之后精确定位是增加柱状图图例出了问题。但是据说poi4没有word对柱状图图例的操作,最后解决办法只能预先写好图例。

另外刷新柱状图页面数据建议下面这个

/**
 * 刷新柱状图数据方法
 *
 * @param typeChart
 * @param serList
 * @param dataList
 * @param fldNameArr
 * @param position
 * @return
 */
public  static boolean refreshBarStrGraphContent(Object typeChart,
                                                 List<?> serList, List<Map<String, String>> dataList, List<String> fldNameArr, int position) {
    boolean result = true;
    //更新数据区域
    for (int i = 0; i < serList.size(); i++) {
        //CTSerTx tx=null;
        CTAxDataSource cat = null;
        CTNumDataSource val = null;
        CTBarSer ser = ((CTBarChart) typeChart).getSerArray(i);
        //tx= ser.getTx();
        // Category Axis Data
        cat = ser.getCat();
        // 获取图表的值
        val = ser.getVal();
        // strData.set
        CTStrData strData = cat.getStrRef().getStrCache();
        CTNumData numData = val.getNumRef().getNumCache();
        strData.setPtArray((CTStrVal[]) null); // unset old axis text
        numData.setPtArray((CTNumVal[]) null); // unset old values

        // set model
        long idx = 0;
        for (int j = 0; j < dataList.size(); j++) {
            //判断获取的值是否为空
            String value = "0";
            if (new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))) != null) {
                value = new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))).toString();
            }
            if (!"0".equals(value)) {
                CTNumVal numVal = numData.addNewPt();//序列值
                numVal.setIdx(idx);
                numVal.setV(value);
            }
            CTStrVal sVal = strData.addNewPt();//序列名称
            sVal.setIdx(idx);
            sVal.setV(dataList.get(j).get(fldNameArr.get(0)));
            idx++;
        }
        numData.getPtCount().setVal(idx);
        strData.getPtCount().setVal(idx);


        //赋值横坐标数据区域
        String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0)
                .formatAsString("Sheet1", true);
        cat.getStrRef().setF(axisDataRange);

        //数据区域
        String numDataRange = new CellRangeAddress(1, dataList.size(), i + position, i + position)
                .formatAsString("Sheet1", true);
        val.getNumRef().setF(numDataRange);

    }
    return result;
}

2、之前遇到有的字段可以替换有的不行

解决方式是每个需要替换的字段及标识符号需要重头到尾手动写出来,不能复制粘贴!!!!主要是因为里面字段识别符号和你需要替换的单词分开了。最新思路是自己将替换自己识别字段组合起来,这样就比较正常了。不像原版替换比较魔性没有规律。

关于文档内容无法替换建议参考

https://blog.csdn.net/chengui1990/article/details/100703359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值