Apache Poi excel删除空白行

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

我试过从这里的代码,但它不起作用….

我还没有find任何解决方法,如何轻松地获得“真正”的行数,但我find了一个解决scheme,以消除这样的行,这可能是有用的人解决类似的问题。 见下面。

我search了一下,发现了这个解决scheme

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

有两种方法:

1.) 没有代码 :复制你的Excel的内容,并将其粘贴到一个新的Excel中,以后重命名是根据需要。

2.) 与代码 (我没有find任何function,所以我创build了我自己的function):

你需要检查每个单元格的空白/空string/ nulltypes的东西。 在处理 (我期待你正在处理行明智也我使用org.apache.poi.xssf.usermodel.XSSFRow )之前,把一个if检查,并检查这个方法的返回types在if(条件) ,如果这是真的,意味着行(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 . . } } 

希望这会有所帮助。 🙂

根据我对删除行的理解,您必须select所有的单元格并按下删除button。 如果我是正确的,那么你已经通过错误的方式删除行。 通过这种方式,单元格变为空白不会被删除,所以行实际上包含空值的单元格,这就是为什么包含在行计数。

正确的方法是从行号出现的第一个单元格左边select行。 点击行号将select完整的行。 用Shift键select所有需要的行。 现在右键单击,然后select删除。

这可能对你有帮助。

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