Java Apache POI将行移到最后一行vs将行移到上一行
我正在使用ApachePOI处理excel文件。我想删除指定的行,然后发现第一个方法不是wort,我的意思是删除的行应该移动到此工作表的末尾,但它仍然没有移动 方法1:Java Apache POI将行移到最后一行vs将行移到上一行,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用ApachePOI处理excel文件。我想删除指定的行,然后发现第一个方法不是wort,我的意思是删除的行应该移动到此工作表的末尾,但它仍然没有移动 方法1: sheet.shiftRows(rowNum, rowNum, sheet.getLastRowNum() - rowNum, true, false); sheet.shiftRows(rowNum + 1, sheet.getLastRowNum(), -1, true, false); 方法2: sheet.shift
sheet.shiftRows(rowNum, rowNum, sheet.getLastRowNum() - rowNum, true, false);
sheet.shiftRows(rowNum + 1, sheet.getLastRowNum(), -1, true, false);
方法2:
sheet.shiftRows(rowNum, rowNum, sheet.getLastRowNum() - rowNum, true, false);
sheet.shiftRows(rowNum + 1, sheet.getLastRowNum(), -1, true, false);
有人能帮我吗
更新
测试后,我发现其他prombel使用的是ApachePOI版本,方法1是否有效?该逻辑不是用于删除行的逻辑。它仅将行
rowNum
移动到最后一行的位置。所以最后一行被覆盖,行rowNum
为空。这不是我所说的删除行。此外,当使用XSSF
(*.xlsx
)时,这通常会导致Excel
文件损坏。很明显,方法2
但这一条线并不总是有效的。仅当要删除的行之后有填充行时,此选项才有效。如果不是这种情况,rowNum+1
将大于sheet.getLastRowNum()
,并且失败。在这种情况下,我们应该将空的rowNum+1
上移一位
void deleteRow(Sheet sheet, int rowNum) {
if (rowNum > sheet.getLastRowNum()) return; // rowNum is outside the filled rows
if (rowNum + 1 < sheet.getLastRowNum()) { // there are filled rows after the to delete row
sheet.shiftRows(rowNum + 1, sheet.getLastRowNum(), -1, true, false);
} else { // there are no filled rows after the to delete row, so shift rowNum + 1 one up
sheet.shiftRows(rowNum + 1, rowNum + 1, -1, true, false);
}
}
void deleteRow(工作表,int rowNum){
if(rowNum>sheet.getLastRowNum())return;//rowNum在填充的行之外
如果(rowNum+1