0

我想获取图表的 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

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

4

1 回答 1

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)打开文件的地方,好像布局还没有完成,将由图形用户界面。在这种情况下,我认为可以使用 PUNO 调查此解决方案:

http://www.wstech2.net/?do=0a,01,05

这在 Php 和 OpenOffice 的运行实例之间架起了一座桥梁,它公开了 UNO 接口。我看过这个,但安装起来似乎过于复杂,但也许这是唯一的方法。

于 2015-09-29T14:16:11.993 回答