Создание точечной диаграммы Apache POI - PullRequest
0 голосов
/ 01 мая 2018

В настоящее время генерируется диаграмма рассеяния с использованием POI, однако график выглядит странно: charts Один из них генерируется с использованием моего кода, другой - вручную в Excel. Они оба имеют тип «разброс с прямыми линиями и маркерами», однако сгенерированный график по некоторым причинам показывает кривые линии. Другая проблема заключается в том, что каждая из точек данных указана отдельно в легенде, а также имеет другой цвет.

public void GenerateChart(XSSFSheet sheet) {
    XSSFDrawing drawing = sheet.createDrawingPatriarch();
    XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);

    XSSFChart chart = drawing.createChart(anchor);
    XSSFChartLegend legend = chart.getOrCreateLegend();
    legend.setPosition(LegendPosition.TOP_RIGHT);

    XSSFValueAxis bottomAxis = chart.createValueAxis(AxisPosition.BOTTOM);
    XSSFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
    leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);

    CellRangeAddress crXData = new CellRangeAddress(1, sheet.getLastRowNum(), 0, 0);
    CellRangeAddress crYData = new CellRangeAddress(1, sheet.getLastRowNum(), 1, 1);
    CellReference crTitle = new CellReference(0,1);
    Cell cell = sheet.getRow(crTitle.getRow()).getCell(crTitle.getCol());

    ChartDataSource<Number> dsXData = DataSources.fromNumericCellRange(sheet, crXData);
    ChartDataSource<Number> dsYData = DataSources.fromNumericCellRange(sheet, crYData);

    XSSFScatterChartData data = chart.getChartDataFactory().createScatterChartData();
    ScatterChartSeries seriesTitler = data.addSerie(dsXData, dsYData);

    seriesTitler.setTitle(cell.getStringCellValue());
    chart.plot(data, bottomAxis, leftAxis);
}

Использование Apache POI 3.17 Документация здесь показывает, что XSSFScatterChartData и другие устаревшие, и что вместо этого я должен использовать XDDFScatterChartData. Однако я не могу понять, где взять .jar, чтобы использовать это. Я предполагаю, что это в бета-версии?

Что я хочу сделать, это сгенерировать что-то вроде диаграммы справа от изображения, созданной вручную. Поскольку POI, позволяющая создавать диаграммы, кажется относительно новой вещью, я не смог найти никаких подсказок. Кто-нибудь знает хитрость?

1 Ответ

0 голосов
/ 01 мая 2018

Проблемы изменены по умолчанию для Excel диаграмм в более новых Excel версиях.

В точечных диаграммах есть настройка для сглаживания линии Apache poi не устанавливает это. Но теперь в более новых Excel версиях эта опция по умолчанию имеет значение true, если она не установлена.

Также есть настройка для изменения цвета каждой точки данных. Также apache poi не устанавливает это. Но теперь в более новых Excel версиях эта опция по умолчанию имеет значение true, если не установлена.

Так что нам нужно установить оба этих параметра в false, как и хотелось:

...
  chart.plot(data, bottomAxis, leftAxis);

  //set properties of first scatter chart data series to not smooth the line:
  ((XSSFChart)chart).getCTChart().getPlotArea().getScatterChartArray(0).getSerArray(0)
   .addNewSmooth().setVal(false);

  //set properties of first scatter chart to not vary the colors:
  ((XSSFChart)chart).getCTChart().getPlotArea().getScatterChartArray(0)
   .addNewVaryColors().setVal(false);
...

К сожалению, https://poi.apache.org/apidocs/ - это не Документация по API POI для последней стабильной версии, но для текущей "Ночной сборки". Поэтому для использования XDDF вместо XSSF необходимо использовать ночные сборки, которые, конечно, являются , а не стабильными выпусками, которые следует использовать в производительном коде.

...