使用 Java 和 Apache POI 生成 Excel 折线图

本教程将引导你使用 Java 和 Apache POI 库读取 Excel 文件 'input-1.xlsx' 中 'P1' 工作表的数据,生成一个简单的折线图,并将图表保存回同一个 Excel 文件。

以下是代码示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.openxmlformats.schemas.drawingml.x2006.chart.*;

import java.io.*;

public class ExcelLineChartExample {
    public static void main(String[] args) {
        try {
            // 读取 Excel 文件
            FileInputStream file = new FileInputStream(new File('input-1.xlsx'));
            XSSFWorkbook workbook = new XSSFWorkbook(file);
            XSSFSheet sheet = workbook.getSheet('P1');

            // 创建折线图
            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.BOTTOM);

            // 设置横向坐标轴 (时间)
            XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
            xAxis.setTitle('时间');
            XSSFChartUtil.setDateFormatAxis(xAxis);

            // 设置竖向坐标轴 (数值)
            XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
            yAxis.setTitle('数值');

            // 创建数据系列
            XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);
            XDDFDataSource<String> xData = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 126, 0, 0));
            XDDFNumericalDataSource<Double> yData = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 126, 2, 2));
            XDDFLineChartData.Series series = (XDDFLineChartData.Series) data.addSeries(xData, yData);
            series.setTitle('数据', null);

            // 绘制折线图
            chart.plot(data);

            // 保存 Excel 文件
            FileOutputStream outputFile = new FileOutputStream(new File('input-1.xlsx'));
            workbook.write(outputFile);
            outputFile.close();

            System.out.println('折线图生成成功!');
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码说明:

  1. 导入必要的类:确保导入 org.apache.poi.* 下的相关类,以及 java.io.* 用于文件操作。
  2. 读取 Excel 文件:使用 FileInputStream 读取 'input-1.xlsx' 文件,并使用 XSSFWorkbook 创建工作簿对象。
  3. 获取工作表:使用 workbook.getSheet('P1') 获取名为 'P1' 的工作表。
  4. 创建图表对象:使用 sheet.createDrawingPatriarch() 创建绘图区,然后使用 drawing.createChart(anchor) 创建图表对象。
  5. 设置坐标轴:使用 chart.createCategoryAxis()chart.createValueAxis() 创建横坐标轴和纵坐标轴,并设置标题和格式。
  6. 创建数据系列:使用 chart.createData() 创建数据系列,并使用 XDDFDataSourcesFactory 从指定单元格范围读取数据。
  7. 绘制图表:使用 chart.plot(data) 绘制折线图。
  8. 保存文件:使用 FileOutputStream 将修改后的工作簿保存回 'input-1.xlsx' 文件。

请确保:

  • 将 POI 库的 JAR 文件添加到项目的类路径中。
  • 'input-1.xlsx' 文件存在于项目的根目录下。
  • 'P1' 工作表中 A1-A127 单元格包含时间数据,C1-C127 单元格包含数值数据。

通过以上步骤,你就可以使用 Java 和 Apache POI 库轻松地读取 Excel 数据并生成折线图了。

Java POI 读取 Excel 数据生成折线图并保存

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

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