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

时间:2013-06-21 23:58:28

标签: java excel row apache-poi

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

 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()之后我写了我的新文件。但我的代码现在已经生效了。我只需要删除/删除我的数据中的空行(任何一个)。这样做有可能吗?如果是的话,我做得对吗?如果没有人可以帮助我这样做吗?提前致谢!

2 个答案:

答案 0 :(得分:11)

如果您需要记忆召回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(这应该有效地删除一个空行)。如果你有多行并且有办法确定该行是否为空,那么我建议如下:

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为正,则行向下移动。所以我不太确定你是否打算在你提供的代码中将那一行的行减少500或者不是。我希望这会有所帮助。

答案 1 :(得分:3)

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

有关详细信息,请查看here