使用Apache POI 4.0运行官方示例LineChars和ScatterChart时出现问题

时间:2018-09-10 18:36:07

标签: java excel charts apache-poi

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

1 个答案:

答案 0 :(得分:1)

新的XDDF代码缺少axIdlineChartscatterChart的设置。

/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

它将起作用。