上代码
FileInputStream in = new FileInputStream(new File("xxxx\\测试.xlsx"));
//通过输入流读取指定的Excel文件
XSSFWorkbook workbook = new XSSFWorkbook(in);
//获取Excel文件的第1个Sheet页
Sheet sheet = workbook.getSheetAt(0);
int dataEnd = 0;
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType().equals(CellType.STRING)) {
//这里的DATA_END为final static String DATA_END = "&dataEnd";
//&dataEnd 是我在xlsx文件中的标识用来获取这个标识定位
if (cell.getRichStringCellValue().getString().equals(DATA_END)) {
dataEnd = cell.getRowIndex();
}
}
}
}
sheet.shiftRows(dataEnd, sheet.getLastRowNum(), 1, true, false);
Row previousRow = sheet.getRow(dataEnd - 1);
CellStyle rowStyle = previousRow.getRowStyle();
// 创建新行并复制样式和数据
Row newRow = sheet.createRow(dataEnd);
newRow.setRowStyle(rowStyle);
for (int i = 0; i < previousRow.getLastCellNum(); i++) {
Cell oldCell = previousRow.getCell(i);
Cell newCell = newRow.createCell(i);
if (oldCell != null) {
newCell.setCellStyle(oldCell.getCellStyle());
switch (oldCell.getCellType()) {
case BLANK:
break;
case BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case ERROR:
newCell.setCellErrorValue(oldCell.getErrorCellValue());
break;
case FORMULA:
//注意这里复制的函数也跟上一行的相等 这里需要自己处理
//目前我还没想到怎么填充公式下来 ┭┮﹏┭┮
System.out.println(oldCell.getCellFormula());
newCell.setCellFormula(oldCell.getCellFormula()); // 复制公式
break;
case NUMERIC:
newCell.setCellValue(oldCell.getNumericCellValue());
break;
case STRING:
newCell.setCellValue(oldCell.getStringCellValue());
break;
}
}
}
FileOutputStream fileOut = new FileOutputStream("xxxxx\\测试1.xlsx");
workbook.write(fileOut);
fileOut.close();
workbook.close();
in.close();
图中&dataEnd 就是我要插入数据的位置。
谢谢支持