Apache POI Shift Row

时间:2014-06-10 03:58:11

标签: java excel apache apache-poi

我需要一种在预先存在的行之间插入新单元格和/或行而不删除任何行的方法。

我尝试使用:

public static void addRow(File f, int amount, int currentRow)
        throws Exception {
    FileInputStream file = new FileInputStream(f);
    XSSFWorkbook workbook = new XSSFWorkbook(file);
    XSSFSheet sheet = workbook.getSheetAt(0);
    sheet.shiftRows(currentRow, currentRow + amount, amount, true, true);
    file.close();
    FileOutputStream out = new FileOutputStream(f);
    workbook.write(out);
    out.close();
}

但不幸的是,它删除了一些行以适应这种转变。删除的行似乎是随机的,它们实际上并不直接位于移位的行或以上。如果我移动多行,它们似乎发生在移位的行之间。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

API的第二个参数是“endRow” - 通过传递“currentRow + amount”,您不会将所有行从插入点开始直到结束。相反,你只需要移动“金额”行 - 这可能会导致超出“currentRow + amount”的所有行的覆盖(如果有的话)。

我会这样做:

sheet.shiftRows(currentRow, sheet.getLastRowNum()+1, amount, true,true);