Java 自动生成 Excel 时间数据折线图
要在 Java 中自动利用已有 Excel 文件数据在 Excel 文件中绘制时间数据折线图,可以使用 Apache POI 和 JFreeChart 库。
- 首先,使用 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();
- 然后,使用 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);
- 最后,使用 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 文件中插入一个包含生成的图表的图片。
原文地址: https://www.cveoy.top/t/topic/f2Kb 著作权归作者所有。请勿转载和采集!