Apache Poi excel删除空白行

时间:2013-07-30 10:30:24

标签: java excel apache-poi

我有一个包含3000行的excel文件。我删除了2000(使用ms excel应用程序),但是当我从代码调用sheet.getLastRowNum()时,它给了我3000(而不是1000)..如何删除空白行?

我尝试了here中的代码,但它不起作用....

4 个答案:

答案 0 :(得分:4)

有两种方法:

1。)没有代码:     复制excel的内容并将其粘贴到新的Excel中,稍后根据需要重命名。

2。)使用代码(我找不到任何函数,所以我创建了自己的函数):

您需要检查每个单元格是否有任何类型的空白/空字符串/ null 类型的东西。 在处理之前(我希望您正在逐行处理我也使用 org.apache.poi.xssf.usermodel.XSSFRow ),请输入 if 检查,并在 if(条件)中检查此方法的返回类型,如果为true表示行(XSSFRow)具有某个值,则另外明智地移动迭代器到下一行

public boolean containsValue(XSSFRow row, int fcell, int lcell) 
{
    boolean flag = false;
    for (int i = fcell; i < lcell; i++) {
    if (StringUtils.isEmpty(String.valueOf(row.getCell(i))) == true || 
        StringUtils.isWhitespace(String.valueOf(row.getCell(i))) == true || 
        StringUtils.isBlank(String.valueOf(row.getCell(i))) == true || 
        String.valueOf(row.getCell(i)).length() == 0 || 
        row.getCell(i) == null) {} 
    else {
                flag = true;
        }
    }
        return flag;
}

所以最后你的处理方法看起来像

.
.
.
int fcell = row.getFirstCellNum();// first cell number of excel
int lcell = row.getLastCellNum(); //last cell number of excel
while (rows.hasNext()) {
row = (XSSFRow) rows.next();//increment the row iterator
if(containsValue(row, fcell, lcell) == true){

.
.
..//processing
.
.
}

}

希望这会有所帮助。 :)

答案 1 :(得分:3)

我还没有找到任何关于如何轻松获取“真实”行数的解决方案,但我找到了一个解决方案来删除这些行,这些行可能对处理类似问题的人有用。见下文。

我搜索了一下,发现了这个solution

它只是从底部删除那些空行,这可能正是你想要的。

答案 2 :(得分:0)

根据我对删除行的理解,您必须选择所有单元格并按下删除按钮。如果我是对的,那么你已经错误地删除了行。通过这种方式,单元格变为空白而不删除,因此行实际上包含具有空白值的单元格,这就是为什么要包含在行计数中。

执行此操作的正确方法是从第一个单元格左侧选择行号出现的行。单击行号将选择完整的行。借助shift键选择所有必需的行。现在右键单击,然后选择删除。

This may be helpful for you.

答案 3 :(得分:-1)

  1. 通过poi api删除行/列
  2. 将xls转移到csv
  3. 将csv转移到xls 希望这会对你有所帮助