【问题标题】:Apache Poi excel remove blank rowsApache Poi excel 删除空白行
【发布时间】:2013-07-30 10:30:23
【问题描述】:

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

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

【问题讨论】:

  • 检查stackoverflow.com/a/17254637/624003...如果单元格值为空白,并不意味着它们为空。
  • 那 1k 行在您的 excel 文件的开头?
  • @Lenymm,是的,我删除了最后 2000 行...
  • 如何删除 Excel 中的行?

标签: java excel apache-poi


【解决方案1】:

有两种方法:

1.) 无代码: 复制你的excel内容粘贴到新的excel中,以后根据需要重命名。

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

您需要检查每个单元格中是否存在任何类型的空白/空字符串/null。 在处理 row 之前(我希望你正在处理行明智,我也在使用 org.apache.poi.xssf.usermodel.XSSFRow),放一个 if 检查,并在 if(condition) 中检查此方法的返回类型,如果为 true,则表示 row(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
.
.
}

}

希望这会有所帮助。 :)

【讨论】:

  • 还有 row.getfirstcellnum() 和 row.getLastcellnum(),所以你不需要传递额外的 2 个参数
【解决方案2】:

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

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

它所做的只是从底部删除那些可能正是您想要的空行。

【讨论】:

    【解决方案3】:

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

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

    This may be helpful for you.

    【讨论】:

      【解决方案4】:
      1. 通过 poi api 删除行/列
      2. 将 xls 传输到 csv
      3. 将 csv 传输到 xls 希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2013-06-19
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多