阿帕奇POI删除行和追加行

问题描述 投票:0回答:1

我使用的是 apache-poi(3.16 and 4.0.0) 来生成一个excel文件。我需要删除指定的行(删除行并移动到最后一行),并在最后一行之后追加数据。当我移动这一行时,我发现它并没有像预期的那样工作,我的代码是这样的(rowNum < lastRowNum)。

这是我的代码(rowNum < lastRowNum)。

shiftRows1

sheet.shiftRows(rowNum, rowNum, sheet.getLastRowNum() - rowNum, true, false);

shiftRows2

sheet.shiftRows(rowNum + 1, sheet.getLastRowNum(), -1, true, false);

附加行

setRowValue(sheet.getLastRowNum() + 1, objectArray);

我的问题

  1. shiftRows1 + appendRow + 4.0.0/3.16 + XSSF :清除rowNum,删除lastRowNum。

  2. shiftRows1 + appendRow + 4.0.0/3.16 + HSSF :清除rowNum和清除lastRowNum。

  3. shiftRows2 + appendRow + 4.0.0 + XSSF :损坏的文件;修复后,删除lastRowNum并清除行>= rowNum。

  4. shiftRows2 + appendRow + 4.0.0/3.16 + HSSF : 删除rowNum,不能追加行(lastRowNum总是等于删除前的lastRowNum)

  5. shiftRows2 + appendRow + 3.16 + XSSF : 工作

经检测,该 shiftRows1 不能使用。为什么?HSSF 后不更新 lastRowNum。appendRow我怎么能实现它使用 shiftRows23.16?

java excel apache-poi
1个回答
0
投票

我用下面的方法处理了这个问题(apache-poi 3.16):

private void removeRow(int rowNum) {
    Row row = sheet.getRow(rowNum);
    if (row == null) return;
    sheet.removeRow(row);

    int lastRowNum = sheet.getLastRowNum();
    if (rowNum < lastRowNum) {
        // bad way: shift the removed row down
        sheet.shiftRows(rowNum + 1, lastRowNum, -1, true, false);
        // remove lastRow: avoid Sheet#getLastRowNum() return same value after Sheet#shiftRows
        if (workbook instanceof HSSFWorkbook) removeRow(lastRowNum);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.