【问题标题】:Problem running official examples LineChars and ScatterChart with Apache POI 4.0使用 Apache POI 4.0 运行官方示例 LineChars 和 ScatterChart 时出现问题
【发布时间】:2018-09-10 18:36:07
【问题描述】:

对于 Apache POI 4.0,official 示例 LineChartScatterChart 存在问题。它们编译和运行没有错误,但创建的 Excel 文件无法打开,说明存在不可读的内容。 Excel 2010 和 2016 提供了从工作簿中恢复数据的选项,单击“是”后,将出现此 dialog。可能是什么问题?

【问题讨论】:

    标签: java excel charts apache-poi


    【解决方案1】:

    新的XDDF 代码缺少lineChartscatterChart 中的axIds 设置。

    /xl/charts/chart1.xml 中看起来像:

    <c:lineChart>
     ...
     <c:axId val="0"/>
     <c:axId val="1"/>
    </c:lineChart>
    

    对于折线图..

    添加:

    ...
                XDDFChartData data = chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
                data.addSeries(xs, ys1);
                data.addSeries(xs, ys2);
                chart.plot(data);
    
                //setting the axis Ids to the LineChart
                chart.getCTChart().getPlotArea().getLineChartArray(0).addNewAxId().setVal(bottomAxis.getId());
                chart.getCTChart().getPlotArea().getLineChartArray(0).addNewAxId().setVal(leftAxis.getId());
    
    
                // Write the output to a file
                try (FileOutputStream fileOut = new FileOutputStream("ooxml-line-chart.xlsx")) {
                    wb.write(fileOut);
                }
    ...
    

    LineChart.java

    ...
                XDDFChartData data = chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);
    
                data.addSeries(xs, ys1);
                data.addSeries(xs, ys2);
                chart.plot(data);
    
                //setting the axis Ids to the ScatterChart
                chart.getCTChart().getPlotArea().getScatterChartArray(0).addNewAxId().setVal(bottomAxis.getId());
                chart.getCTChart().getPlotArea().getScatterChartArray(0).addNewAxId().setVal(leftAxis.getId());
    
    
                // Write the output to a file
                try (FileOutputStream fileOut = new FileOutputStream("ooxml-scatter-chart.xlsx")) {
                    wb.write(fileOut);
                }
    
    ...
    

    ScatterChart.java

    它会起作用的。

    【讨论】:

    • 谢谢,它有效。你能解释一下为什么这个设置如此重要吗?对我来说,这似乎是多余的,因为已经有 XDDFChartData data = chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);。请注意,我一直在使用平滑和不同颜色的设置。默认情况下启用平滑,但可以将其关闭。不同颜色的运气不好。查看this 帖子了解相关信息。
    • @trimtosize:apache poi 的新 XDDF 代码简直是错误的。就是这样。
    • 这是否意味着设置轴 ID 可以被视为一个错误,并且 POI 应该在 createData 方法的引擎盖下自动设置它?
    • @trimtosize: 是的,因为直到apache poi 3.17 版的XSSFChart 代码已经正确地做到了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多