Java POI 读取 Excel 数据生成折线图并保存
使用 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();
}
}
}
代码说明:
- 导入必要的类:确保导入
org.apache.poi.*下的相关类,以及java.io.*用于文件操作。 - 读取 Excel 文件:使用
FileInputStream读取 'input-1.xlsx' 文件,并使用XSSFWorkbook创建工作簿对象。 - 获取工作表:使用
workbook.getSheet('P1')获取名为 'P1' 的工作表。 - 创建图表对象:使用
sheet.createDrawingPatriarch()创建绘图区,然后使用drawing.createChart(anchor)创建图表对象。 - 设置坐标轴:使用
chart.createCategoryAxis()和chart.createValueAxis()创建横坐标轴和纵坐标轴,并设置标题和格式。 - 创建数据系列:使用
chart.createData()创建数据系列,并使用XDDFDataSourcesFactory从指定单元格范围读取数据。 - 绘制图表:使用
chart.plot(data)绘制折线图。 - 保存文件:使用
FileOutputStream将修改后的工作簿保存回 'input-1.xlsx' 文件。
请确保:
- 将 POI 库的 JAR 文件添加到项目的类路径中。
- 'input-1.xlsx' 文件存在于项目的根目录下。
- 'P1' 工作表中 A1-A127 单元格包含时间数据,C1-C127 单元格包含数值数据。
通过以上步骤,你就可以使用 Java 和 Apache POI 库轻松地读取 Excel 数据并生成折线图了。
原文地址: https://www.cveoy.top/t/topic/fSzt 著作权归作者所有。请勿转载和采集!