在Excel工作表中使用JAVA永久删除空行Apache POI

我想永久删除那些没有任何types数据的空行! 我这样做是这样的:

private void shift(File f){ File F=f; HSSFWorkbook wb = null; HSSFSheet sheet=null; try{ FileInputStream is=new FileInputStream(F); wb= new HSSFWorkbook(is); sheet = wb.getSheetAt(0); int rowIndex = 0; int lastRowNum = sheet.getLastRowNum(); if (rowIndex >= 0 && rowIndex < lastRowNum) { sheet.shiftRows(rowIndex, lastRowNum, 500); } FileOutputStream fileOut = new FileOutputStream("C:/juni.xls"); wb.write(fileOut); fileOut.close(); } catch(Exception e){ System.out.print("SERRO "+e); } } 

之后shiftRows()我写我的新文件。 但我的代码现在有效果。 我只需要删除/删除我的数据里面的空行(任何)。 那么有可能这样做? 如果是的话,我是对的吗? 如果没有人可以帮我这样做吗? 提前致谢!

如果内存调用shiftRows(int startRow, int endRow, int n)是你所需要的。 我不记得如何检查一行是否为空,但如果你知道一行是空的(通常使用removeRow(Row row) ),并且你知道rowIndex,那么它并不是那么糟糕。 通过电话:

 int rowIndex; //Assume already known and this is the row you want to get rid of int lastIndex = sheet.getLastRowNum(); sheet.shiftRows(rowIndex + 1, lastIndex, -1); 

您将[rowIndex + 1,lastIndex]中的每一行都加1(这应该有效地删除一个空行)。 如果你有多行,并有一种方法来确定行是空的,我build议像这样:

 for(int i = 0; i < sheet.getLastRowNum(); i++){ if(isEmpty(sheet.getRow(i)){ sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1); i--;//Adjusts the sweep in accordance to a row removal } } boolean isEmpty(Row row){ //Code to determine if a row is empty } 

作为一个小记,如果n是负数,行向上移动。 如果n是正值,那么行向下移动。 所以我不太清楚,如果你打算在你提供的代码中将这一行的数据量减less500个。 我希望这有帮助。

而不是shiftRows方法。 尝试removeRow方法。

欲了解更多信息,请看这里 。