2015-08-21 4 views
0

Я хочу получить информацию, такую ​​как x, y, ширина, высота, название диаграммы. Вот моя версия для HSSFChart, который работает (возвращает ненулевое значение):Как получить простую информацию о XSSFChart?

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

все ваши переменные пустые от начала до конца вашего скрипта? вы можете проверить это в режиме отладки и переместить указатель мыши на некоторые значения. – GEnGEr

+0

Это было мое плохо. Я использовал ScatterChart вместо класса LineChart (в данном случае). Несмотря на это, я до сих пор не знаю, как получить x, y, ширину и высоту диаграммы XSSF. Вышеприведенный код возвращает 0. Например: 'chart.getManualLayout(). GetX();' – SzikakaPupu

ответ

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 файле. В любом случае, я прокомментировал соответствующую часть, и у меня есть NULL в результате запросов на ManualLayout. Это ужасно.

У меня есть сильное ощущение, что диаграмма не отображается в XML-файле (как и XLSX), но она отображается только там, где мы открываем файл с помощью Office (или OpenOffice), как будто макет еще не выполнен и будет выполняться графическим интерфейсом. В этом случае я думаю, можно исследовать с помощью этого решения PUNO:

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

Это involevs моста между Php и запущенным экземпляром OpenOffice, который предоставляет интерфейс UNO. Я смотрел на это, но он казался слишком сложным для установки, но, возможно, это единственный способ.