我想获取信息,如x,y,宽度,高度,图表标题。这是我的HSSFChart版本(它返回非零值):
HSSFChart chart
title = chart.getChartTitle();
x = chart.getChartX();
y = chart.getChartY();
width = chart.getChartWidth();
height = chart.getChartHeight();
问题是我无法从XSSFChart获得相同或任何其他信息。
XSSFDrawing drawing = sheet.createDrawingPatriarch();
List<XSSFChart> chartsList = drawing.getCharts();
for (XSSFChart chart : chartsList){
#ctChart
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
title = ctChart.getTitle.toString();
int size = plotArea.getScatterChartList().size();
for (int j = 0; j < size; j++){
List<CTScatterSer> seriesList = plotArea.getScatterChartList().get(j).getSerList();
for (int i = 0; i < seriesList.size(); i++){
CTScatterSer ser = seriesList.get(i);
XmlObject serieX = ser.getXVal();
XmlObject serieY = ser.getYVal();
System.out.println("x: " + serieX.xmlText() + " y: " + serieY.xmlText());
}
}
if (plotArea.getLayout() != null)
if (plotArea.getLayout().getManualLayout() != null)
System.out.println("x: " + plotArea.getLayout().getManualLayout().getX() + " y: " +
plotArea.getLayout().getManualLayout().getY());
#chart
chart.getManualLayout().getX(); // returns 0
chart.getManualLayout().getY(); // returns 0
chart.getManualLayout().getHeightRatio(); // returns 0.0
chart.getManualLayout().getWidthRatio(); // returns 0.0
即使有很多图表和系列,它也不会打印。
答案 0 :(得分:0)
我正在努力解决类似的问题,而且我的代码也陷入困境......
List<org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart> chartList=plotArea.getLineChartList();
int size = chartList.size();
我是一个LineChart所以我已经相应地改变了,但是我有这个运行时错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/openxmlformats/schemas/drawingml/x2006/chart/impl/CTPlotAreaImpl$1LineChartList
at org.openxmlformats.schemas.drawingml.x2006.chart.impl.CTPlotAreaImpl.getLineChartList(Unknown Source)
at ....
我的poi-openxml-schemas-3.13-20150929.jar
文件似乎缺少某些内容。
无论如何,我已经注释掉了相关部分,并且由于对ManualLayout的查询而得到NULL。这太糟糕了。
我强烈认为图表不是在XML文件中呈现(就像XLSX一样),但它只在我们使用Office(或OpenOffice)打开文件的地方呈现,就好像布局仍然没有完成并将由GUI完成。 在这种情况下,我认为可以使用PUNO调查此解决方案:
http://www.wstech2.net/?do=0a,01,05
这将在Php和OpenOffice的运行实例之间建立一个桥梁,它暴露了UNO接口。 我看过这个,但安装起来似乎过于复杂,但也许这是唯一的方法。