Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache POI将行移到最后一行vs将行移到上一行_Java_Excel_Apache Poi - Fatal编程技术网

Java Apache POI将行移到最后一行vs将行移到上一行

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

我正在使用ApachePOI处理excel文件。我想删除指定的行,然后发现第一个方法不是wort,我的意思是删除的行应该移动到此工作表的末尾,但它仍然没有移动

方法1:

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