2014-02-18 3 views
9

Я создаю LineChart, используя Apache POI в документе Excel. Насколько мне удалось достичь в изображении ниже:Apache POI добавить название серии в LineChart

enter image description here

Я написал код, используя примеры из SVN сервера Apache, так что мой нынешний подход выглядит следующим образом:

Drawing drawing = question.createDrawingPatriarch(); 
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 8, 14, 18); 

Chart chart = drawing.createChart(anchor); 
ChartLegend legend = chart.getOrCreateLegend(); 
legend.setPosition(LegendPosition.TOP_RIGHT); 

LineChartData data = chart.getChartDataFactory().createLineChartData(); 

ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM); 
bottomAxis.setCrosses(AxisCrosses.AUTO_ZERO); 
ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT); 
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); 

List<ReportQuestionModel> questionModels = groupModel.getQuestionModels(); 
for (ReportQuestionModel questionModel : questionModels) { 

    List<ReportOptionModel> optionModels = questionModel.getOptionModels(); 
    for (ReportOptionModel optionModel : optionModels) { 
     rowNum++; 

     XSSFRow optionRow = question.createRow(rowNum); 

     XSSFCell optionsCell = optionRow.createCell(0); 
     optionsCell.setCellValue(optionModel.getAnswerText()); 

     long count = optionModel.getCount(); 
     totalResponses += count; 

     XSSFCell optionsCountCell = optionRow.createCell(1); 
     optionsCountCell.setCellValue(count); 

     XSSFCell optionsPercentageCell = optionRow.createCell(2); 
     optionsPercentageCell.setCellValue(optionModel.getPercentage()); 
    } 
} 

ChartDataSource<Number> xs = DataSources.fromNumericCellRange(question, new CellRangeAddress(8, 8, 0, 1)); 
for (int i = 9; i <= rowNum; i ++) { 
    ChartDataSource<Number> ys = DataSources.fromNumericCellRange(question, new CellRangeAddress(i, i, 0, 1)); 
    data.addSerie(xs, ys); 
} 
chart.plot(data, bottomAxis, leftAxis); 

Что Я не могу найти, как получить имена по умолчанию "Series 1", "Series 2", ..., "Series n", которые будут взяты из моих значений из столбцов, в этом случае из: «Параметры ответа». И, как представляется, в текущем API не существует каких-либо методов определения имен серии.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

ответ

13

Это было довольно straighforward, только вместо использования:

data.addSerie(xs, ys); 

мне пришлось использовать:

LineChartSerie chartSerie = data.addSerie(xs, ys); 
chartSerie.setTitle("My Title"); 

Не смотрите на API, что использование data.addSerie(xs, ys); возвращает один LineChartSerie объект на который я могу установить заголовок.

2

Начиная с версии 3.16 Apache POI, вместо этого используйте setTitleText («Название названия»). Также правильное имя класса - LineChartSeries, а не LineChartSerie. Таким образом, указанное решение будет выглядеть следующим образом:

LineChartSeries chartSeries = data.addSeries(xs,ys); 
chartSeries.setTitleText("My Title"); 

для Apache POI 3,16 года.

Смежные вопросы