以下是整合后的代码:

import java.io.*;
import java.util.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.data.time.*;
import org.jfree.ui.*;
import org.jfree.util.*;

public class ExcelChartGenerator {
    public static void main(String[] args) {
        try {
            // 读取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();

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

            // 将图表插入到Excel文件中
            file = new FileInputStream(new File("data.xlsx"));
            workbook = new XSSFWorkbook(file);
            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();

            file.close();

            // 保存Excel文件
            FileOutputStream out = new FileOutputStream(new File("data.xlsx"));
            workbook.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

该代码将读取名为“data.xlsx”的Excel文件中的第一个工作表中的数据,并将其用于创建一个时间序列图。然后,它将在Excel文件中插入包含生成的图表的图片,并将其保存回“data.xlsx”文件中

1 首先使用Apache POI库读取Excel文件中的时间数据和相关数据。例如可以使用以下代码读取Excel文件中的日期和数值数据:FileInputStream file = new FileInputStreamnew Filedataxlsx;XSSFWorkbook workbook = new XSSFWorkbookfile;XSSFSheet sheet = workbookget

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

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