POI-TL:Word嵌套导致图表标题不生效,图表内容未无法刷新问题简易解决方案

文章介绍了在使用POI-TL处理Word文档时遇到的图表标题不显示和内容无法刷新的问题,作者发现这可能是一个BUG。为避免重新打包,作者提供了一个简单的解决方案,即通过直接操作NiceXWPFDocument对象并写入流来创建DocxRenderData对象,从而正确地嵌套和更新图表数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POI-TL:Word嵌套导致图表标题不生效,图表内容未无法刷新问题简易解决方案

作者说是BUG,新版本不知道有没有修复

复现问题

参考 https://github.com/Sayi/poi-tl/issues/649 时间比较赶(马上需求DDL了,抽空速度记录一下)

issue里面说的很明白,也有大佬给出了解决方案,不过要重新打包,太麻烦了

我这里就搞了个简单点的,你就说能不能用吧

你需要会的东西

http://deepoove.com/poi-tl/#_%E5%B5%8C%E5%A5%97 POI-TL 嵌套

http://deepoove.com/poi-tl/#_%E5%BC%95%E7%94%A8%E6%A0%87%E7%AD%BE POI-TL 图表

解决方案

简单描述就是:

直接拿到NiceXWPFDocument对象进行write(一定要write,BUG就是数据没有写进图表里面)转成流再用DocxRenderData对象接收

代码如下:

public class demo {
    public static void main(String[] args) throws Exception {
        // sub ----------------------------------------------------------------
        //饼状图数据
        ChartSingleSeriesRenderData underManageAssetChart = Charts.ofSingleSeries("", new String[]{"主机设备","网络设备","合并"}).series("countries", new Integer[]{10, 20, 30}).create();

        //子模板数据
        Map<String, Object> subData = new HashMap<>();
        subData.put("chart",underManageAssetChart);
        //这里直接得到NiceXWPFDocument对象
        NiceXWPFDocument sub =       XWPFTemplate.compile("E:\\workspace\\src\\main\\resources\\doc\\sub_template.docx").render(subData).getXWPFDocument();
        //用流写出来
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        sub.write(stream);
        //然后创建DocxRenderData对象,这个就是用来嵌套的word数据对象
        DocxRenderData subDocx = new DocxRenderData(new ByteArrayInputStream(stream.toByteArray()));
        // sub ----------------------------------------------------------------
        
        //这里就和官方实例一样就行了
        Map<String, Object> data = new HashMap<>();
        //加入主模板
        data.put("var", "见证奇迹捏");
        data.put("chart", subDocx);

        //主模板
        XWPFTemplate template = XWPFTemplate.compile("src/main/resources/template/test.docx").render(data);
        //生成文件
        template.writeAndClose(new FileOutputStream("result.docx"));
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清尘丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值