1 首先使用Apache POI库读取Excel文件中的时间数据和相关数据。例如可以使用以下代码读取Excel文件中的日期和数值数据:FileInputStream file = new FileInputStreamnew Filedataxlsx;XSSFWorkbook workbook = new XSSFWorkbookfile;XSSFSheet sheet = workbookget
以下是整合后的代码:
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”文件中
原文地址: https://www.cveoy.top/t/topic/hwDs 著作权归作者所有。请勿转载和采集!