如何获得有关XSSFChart的简单信息?

时间:2015-08-21 10:32:55

标签: excel charts apache-poi xssf hssf

我想获取信息,如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

即使有很多图表和系列,它也不会打印。

1 个答案:

答案 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接口。 我看过这个,但安装起来似乎过于复杂,但也许这是唯一的方法。