1. 使用 Apache POI 库读取输入 Excel 文件中的数据,可以使用以下代码:
FileInputStream file = new FileInputStream(new File('input.xlsx'));
Workbook workbook = new XSSFWorkbook(file);
Sheet sheet = workbook.getSheetAt(0); // 读取第一个sheet
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
   Row row = rowIterator.next();
   Iterator<Cell> cellIterator = row.cellIterator();
   while (cellIterator.hasNext()) {
      Cell cell = cellIterator.next();
      // 处理单元格数据
   }
}
workbook.close();
file.close();
  1. 检测日期列和数据列,可以根据 Excel 文件的具体格式来判断,一般日期列的单元格格式为日期格式,数据列的单元格格式为数值格式。可以使用以下代码检测:
// 判断日期列
if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
   // 处理日期数据
}

// 判断数据列
if (cell.getCellType() == CellType.NUMERIC && !DateUtil.isCellDateFormatted(cell)) {
   // 处理数据
}
  1. 检测数据列中的空白,可以使用以下代码:
if (cell.getCellType() == CellType.BLANK) {
   // 处理空白单元格
}
  1. 计算出数据列中空白单元格的上下单元格数据的平均值,可以使用以下代码:
double sum = 0;
int count = 0;
// 计算上面单元格的值
if (row.getRowNum() > 0) {
   Cell topCell = row.getCell(cell.getColumnIndex());
   if (topCell.getCellType() == CellType.NUMERIC && !DateUtil.isCellDateFormatted(topCell)) {
      sum += topCell.getNumericCellValue();
      count++;
   }
}
// 计算下面单元格的值
if (row.getRowNum() < sheet.getLastRowNum()) {
   Cell bottomCell = sheet.getRow(row.getRowNum() + 1).getCell(cell.getColumnIndex());
   if (bottomCell.getCellType() == CellType.NUMERIC && !DateUtil.isCellDateFormatted(bottomCell)) {
      sum += bottomCell.getNumericCellValue();
      count++;
   }
}
double average = sum / count;
  1. 填充空白,可以使用以下代码:
cell.setCellValue(average);
  1. 最后将处理后的数据写入输出 Excel 文件中,可以使用以下代码:
FileOutputStream outFile = new FileOutputStream(new File('output.xlsx'));
workbook.write(outFile);
outFile.close();

完整代码示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelReaderWriter {
   public static void main(String[] args) throws IOException {
      FileInputStream file = new FileInputStream(new File('input.xlsx'));
      Workbook workbook = new XSSFWorkbook(file);
      Sheet sheet = workbook.getSheetAt(0); // 读取第一个sheet
      Iterator<Row> rowIterator = sheet.iterator();
      while (rowIterator.hasNext()) {
         Row row = rowIterator.next();
         Iterator<Cell> cellIterator = row.cellIterator();
         while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            // 检测日期列
            if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
               // 处理日期数据
            }
            // 检测数据列
            if (cell.getCellType() == CellType.NUMERIC && !DateUtil.isCellDateFormatted(cell)) {
               // 检测空白单元格
               if (cell.getCellType() == CellType.BLANK) {
                  double sum = 0;
                  int count = 0;
                  // 计算上面单元格的值
                  if (row.getRowNum() > 0) {
                     Cell topCell = row.getCell(cell.getColumnIndex());
                     if (topCell.getCellType() == CellType.NUMERIC && !DateUtil.isCellDateFormatted(topCell)) {
                        sum += topCell.getNumericCellValue();
                        count++;
                     }
                  }
                  // 计算下面单元格的值
                  if (row.getRowNum() < sheet.getLastRowNum()) {
                     Cell bottomCell = sheet.getRow(row.getRowNum() + 1).getCell(cell.getColumnIndex());
                     if (bottomCell.getCellType() == CellType.NUMERIC && !DateUtil.isCellDateFormatted(bottomCell)) {
                        sum += bottomCell.getNumericCellValue();
                        count++;
                     }
                  }
                  double average = sum / count;
                  // 填充空白单元格
                  cell.setCellValue(average);
               }
            }
         }
      }
      // 写入输出Excel文件
      FileOutputStream outFile = new FileOutputStream(new File('output.xlsx'));
      workbook.write(outFile);
      outFile.close();
      workbook.close();
      file.close();
   }
}
Java Excel 数据处理:填充空白单元格

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

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