【问题标题】:Permanently Delete Empty Rows Apache POI using JAVA in Excel Sheet在 Excel 表中使用 JAVA 永久删除空行 Apache POI
【发布时间】:2013-06-19 05:12:23
【问题描述】:

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

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

【问题讨论】:

标签: java excel row apache-poi


【解决方案1】:

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

更多信息请查看here

【讨论】:

  • 这并不是说这会在您的数据中创建一个漏洞 - 一个空白 (null) 行。
【解决方案2】:

如果记忆回忆起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。我希望这会有所帮助。

【讨论】:

  • 没问题。玩得开心编码! :D
  • 请注意,如果您在电子表格的很长一段距离内有一个隐藏条目,在行中有很大的间隙之后,那么这种方法可能会非常慢,因为它会遍历数十万个空白行, 将剩余的行重复移动一个位置。
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多