在 Apache POI 中,可以使用 'XDDFChartData' 和 'XDDFDataSource' 类来添加次要数据系列。

以下是一个示例代码,演示如何在 Apache POI 中添加次要数据系列:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xddf.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

public class AddSecondaryDataSeries {
    public static void main(String[] args) throws Exception {
        // 创建工作簿和工作表
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Chart");

        // 创建数据
        Row row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("Category");
        row1.createCell(1).setCellValue("Primary Value");
        row1.createCell(2).setCellValue("Secondary Value");

        Row row2 = sheet.createRow(1);
        row2.createCell(0).setCellValue("A");
        row2.createCell(1).setCellValue(10);
        row2.createCell(2).setCellValue(20);

        Row row3 = sheet.createRow(2);
        row3.createCell(0).setCellValue("B");
        row3.createCell(1).setCellValue(20);
        row3.createCell(2).setCellValue(30);

        Row row4 = sheet.createRow(3);
        row4.createCell(0).setCellValue("C");
        row4.createCell(1).setCellValue(30);
        row4.createCell(2).setCellValue(40);

        // 创建图表
        Drawing drawing = sheet.createDrawingPatriarch();
        ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 1, 10, 15);
        Chart chart = drawing.createChart(anchor);

        // 创建图表数据
        ChartLegend legend = chart.getOrCreateLegend();
        legend.setPosition(LegendPosition.BOTTOM);

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

        // 创建主要数据系列
        ChartDataSource<Number> primaryCategory = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 3, 0, 0));
        ChartDataSource<Number> primaryValues = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 3, 1, 1));
        XDDFLineChartData.Series primarySeries = (XDDFLineChartData.Series) data.addSeries(primaryCategory, primaryValues);
        primarySeries.setTitle("Primary Series", null);

        // 创建次要数据系列
        ChartDataSource<Number> secondaryValues = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 3, 2, 2));
        XDDFLineChartData.Series secondarySeries = (XDDFLineChartData.Series) data.addSeries(primaryCategory, secondaryValues);
        secondarySeries.setTitle("Secondary Series", null);

        // 设置图表样式
        XDDFCategoryAxis categoryAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
        XDDFValueAxis primaryValueAxis = chart.createValueAxis(AxisPosition.LEFT);
        XDDFValueAxis secondaryValueAxis = chart.createValueAxis(AxisPosition.RIGHT);

        primaryValueAxis.setCrosses(secondaryValueAxis);
        secondaryValueAxis.setCrosses(primaryValueAxis);

        chart.plot(data);

        // 保存工作簿
        workbook.write(new FileOutputStream("chart.xlsx"));
        workbook.close();
    }
}

在此示例中,我们创建了一个包含主要数据系列和次要数据系列的线形图。主要数据系列使用列 B 中的数据,次要数据系列使用列 C 中的数据。

Apache POI 5.2.2 版本添加次要数据系列代码示例

原文地址: https://www.cveoy.top/t/topic/fSXY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录