我正在使用Apache POI XSSF API从Excel工作表中删除一行或多行 . 以下是在单个活动中删除多行的代码 .

for (int i = startRowIndexToDel; i <= endRowIndexToDel; i++) {              
            XSSFRow row = sheet.getRow(i);
            if (row != null) {
                sheet.removeRow(row);

            }               
}
if (endRowIndexToDel < lastRowIndex) {
            sheet.shiftRows(endRowIndexToDel + 1, lastRowIndex,
                    startRowIndexToDel - (endRowIndexToDel + 1));
}

当我需要删除的行没有单元格注释时,上面的代码工作正常 . 当他们有单元格注释时,注释会留下并分配给移动到已删除行的位置的行,这不是我想要的 .

当我只需要删除一行并且恰好是最后一行时,情况也是如此 . 在这种情况下,我的代码不会移动行,因为它是最后一行 .

我知道使用removeRow()不会“删除”该行,就像我们右键单击excel行并选择delete一样,而是清除我们在excel中选择一行时发生的数据行 . 单击删除键盘按钮 . 我也注意到后一个动作也没有清除单元格注释 .

我想知道是否有其他人注意到这个问题以及你对此有何修复 . 我可以解析我要删除的行中的所有单元格,如果它们存在则删除单元格注释,但我不想这样做 .