针对你的需求,需要将以下步骤添加到你的Java程序中:

  1. 读取Excel文件中每个月的数据量,并将其存储在一个列表中。

  2. 对于每个月的数据量少于五组的情况,使用Java程序补充数据,使得每个月的数据量都达到五组。

  3. 将原始数据和新补充的数据存储在一个新的Excel文件中,并使用一个折线图展示出来。

下面是一个示例代码,可以实现上述功能:

// 读取Excel文件中每个月的数据量 List monthDataCount = new ArrayList<>(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (row != null) { Cell cell = row.getCell(0); // 获取日期单元格 if (cell != null && cell.getCellType() == CellType.NUMERIC) { Date date = cell.getDateCellValue(); int month = date.getMonth() + 1; if (monthDataCount.size() < month) { monthDataCount.add(1); } else { monthDataCount.set(month - 1, monthDataCount.get(month - 1) + 1); } } } }

// 补充缺失的数据 for (int i = 0; i < monthDataCount.size(); i++) { int count = monthDataCount.get(i); if (count < 5) { for (int j = count; j < 5; j++) { // 在该月最后一天添加一条随机数据 Row lastRow = sheet.getRow(sheet.getLastRowNum()); Row newRow = sheet.createRow(sheet.getLastRowNum() + 1); for (int k = 0; k < lastRow.getLastCellNum(); k++) { Cell lastCell = lastRow.getCell(k); Cell newCell = newRow.createCell(k); if (lastCell != null) { newCell.setCellStyle(lastCell.getCellStyle()); } if (k == 0) { // 生成该月最后一天的日期 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, i); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); Date date = calendar.getTime(); newCell.setCellValue(date); } else { // 生成随机数据 newCell.setCellValue(Math.random() * 100); } } } } }

// 将数据存储在新的Excel文件中,并使用折线图展示 String outputFile = "output2.xlsx"; try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { workbook.write(outputStream);

// 创建折线图
Drawing<?> drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 6, 1, 18, 20);
Chart chart = drawing.createChart(anchor);
ChartLegend legend = chart.getOrCreateLegend();
legend.setPosition(LegendPosition.TOP_RIGHT);

LineChartData data = chart.getChartDataFactory().createLineChartData();

// 添加原始数据
for (int i = 0; i < monthDataCount.size(); i++) {
    int count = monthDataCount.get(i);
    if (count >= 5) {
        List<Double> values = new ArrayList<>();
        for (int j = 0; j < count; j++) {
            Row row = sheet.getRow(j + 1);
            Cell cell = row.getCell(1);
            values.add(cell.getNumericCellValue());
        }
        data.addSeries(chart.getChartDataFactory().createLineChartSeries(String.valueOf(i + 1), values));
    }
}

// 添加新补充的数据
for (int i = 0; i < monthDataCount.size(); i++) {
    int count = monthDataCount.get(i);
    if (count < 5) {
        List<Double> values = new ArrayList<>();
        for (int j = 0; j < count; j++) {
            Row row = sheet.getRow(j + 1);
            Cell cell = row.getCell(1);
            values.add(cell.getNumericCellValue());
        }
        for (int j = count; j < 5; j++) {
            values.add(null);
        }
        data.addSeries(chart.getChartDataFactory().createLineChartSeries(String.valueOf(i + 1), values));
    }
}

// 设置坐标轴
ValueAxis bottomAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.BOTTOM);
bottomAxis.setCrosses(AxisCrosses.AUTO_ZERO);
bottomAxis.setTitle("Month");

ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
leftAxis.setTitle("Value");

chart.plot(data, new ChartAxis[] { bottomAxis, leftAxis });

} catch (Exception e) { e.printStackTrace();

我有一个execl文件我要先对他使用我的名为knn的Java程序然后我要读取其中的每个月有几个数据将每个月少于五组数据补充至五组最后将原数据和新补充出来的数据在最后的execl文件用一个折线图展示出来下面为我的名为knn的Java程序 导入必要的库package orgexample;import javaioFileInputStream; 用于读取输入文件import javaioFileO

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

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