Apache POI将一个Series名称添加到LineChart中

时间:2014-02-18 13:50:25

标签: java excel charts apache-poi

我正在使用Excel文档中的Apache POI创建一个LineChart。据我所知,如下图所示:

enter image description here

我使用Apache的svn中的示例编写了代码,因此我目前的方法如下:

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中似乎没有任何方法可以指定系列的名称。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:13)

这是非常直接的,而不是使用:

data.addSerie(xs, ys);

我必须使用:

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

未查看使用data.addSerie(xs, ys);返回单个LineChartSerie对象的API,我可以在其中设置标题。

答案 1 :(得分:2)

从Apache POI版本3.16起,使用setTitleText(“Title Name”)代替。 正确的类名是LineChartSeries而不是LineChartSerie。 所以,上面的解决方案看起来像:

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

用于Apache POI 3.16及以上版本。