要在 Java 中自动利用已有 Excel 文件数据在 Excel 文件中绘制时间数据折线图,可以使用 Apache POI 和 JFreeChart 库。

  1. 首先,使用 Apache POI 库读取 Excel 文件中的时间数据和相关数据。例如,可以使用以下代码读取 Excel 文件中的日期和数值数据:
FileInputStream file = new FileInputStream(new File('data.xlsx'));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);

List<Date> dates = new ArrayList<Date>();
List<Double> values = new ArrayList<Double>();

for (Row row : sheet) {
    Cell dateCell = row.getCell(0);
    Cell valueCell = row.getCell(1);
    if (dateCell != null && valueCell != null) {
        Date date = dateCell.getDateCellValue();
        double value = valueCell.getNumericCellValue();
        dates.add(date);
        values.add(value);
    }
}

file.close();
  1. 然后,使用 JFreeChart 库创建折线图。例如,可以使用以下代码创建一个时间序列图:
TimeSeries series = new TimeSeries('Data');

for (int i = 0; i < dates.size(); i++) {
    Date date = dates.get(i);
    double value = values.get(i);
    series.add(new Minute(date), value);
}

TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(series);

JFreeChart chart = ChartFactory.createTimeSeriesChart(
    'Title', 'Time', 'Value', dataset, true, true, false);

ChartUtilities.saveChartAsPNG(new File('chart.png'), chart, 800, 600);
  1. 最后,使用 Apache POI 库将生成的图表插入到 Excel 文件中。例如,可以使用以下代码将图表插入到 Excel 文件中:
FileInputStream file = new FileInputStream(new File('data.xlsx'));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);

int lastRowNum = sheet.getLastRowNum();

XSSFWorkbook chartWorkbook = new XSSFWorkbook();
XSSFSheet chartSheet = chartWorkbook.createSheet('Chart');

ByteArrayOutputStream chartOut = new ByteArrayOutputStream();
ChartUtilities.writeChartAsPNG(chartOut, chart, 800, 600);

byte[] chartBytes = chartOut.toByteArray();
int pictureIndex = workbook.addPicture(chartBytes, Workbook.PICTURE_TYPE_PNG);

CreationHelper helper = workbook.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();

ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0);
anchor.setRow1(lastRowNum + 2);
anchor.setCol2(10);
anchor.setRow2(lastRowNum + 20);

Picture picture = drawing.createPicture(anchor, pictureIndex);
picture.resize();

这将在 Excel 文件中插入一个包含生成的图表的图片。

Java 自动生成 Excel 时间数据折线图

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

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