【发布时间】:2018-09-10 18:36:07
【问题描述】:
对于 Apache POI 4.0,official 示例 LineChart 和 ScatterChart 存在问题。它们编译和运行没有错误,但创建的 Excel 文件无法打开,说明存在不可读的内容。 Excel 2010 和 2016 提供了从工作簿中恢复数据的选项,单击“是”后,将出现此 dialog。可能是什么问题?
【问题讨论】:
标签: java excel charts apache-poi
对于 Apache POI 4.0,official 示例 LineChart 和 ScatterChart 存在问题。它们编译和运行没有错误,但创建的 Excel 文件无法打开,说明存在不可读的内容。 Excel 2010 和 2016 提供了从工作簿中恢复数据的选项,单击“是”后,将出现此 dialog。可能是什么问题?
【问题讨论】:
标签: java excel charts apache-poi
新的XDDF 代码缺少lineChart 和scatterChart 中的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 帖子了解相关信息。
apache poi 的新 XDDF 代码简直是错误的。就是这样。
createData 方法的引擎盖下自动设置它?
apache poi 3.17 版的XSSFChart 代码已经正确地做到了这一点。