美文网首页
Java & 利用POI 读取指定excel的真实行数

Java & 利用POI 读取指定excel的真实行数

作者: 乘风破浪的姐姐 | 来源:发表于2020-09-29 17:30 被阅读0次

Java 使用poi包 读excel文件时,获取指定sheet页中数据行数可以通过调用 sheet.getLastRowNum() ;但这种方法仅限于当前sheet页中没有带格式的空白行时。如果其中一行的数据都为空,但是其原本的格式还在,此时使用getLastRowNum()方法计算出来的行数就不正确(比真实行数大)。
那么如何跳过当前sheet页中没有意义的行正确获取excel的真实行数呢?
可以对当前sheet页中的各行进行过滤,将没有意义的行删掉,然后再调用sheet.getLastRowNum() 即可得到真实行。

代码实现
1、方法getVaildRows()获取指定excel的真实行数

public static int getVaildRows(String path) throws IOException, InvalidFormatException {
        FileInputStream excelFileInputStream = new FileInputStream(path);
        Workbook wb = WorkbookFactory.create(excelFileInputStream);
        Sheet sheet = wb.getSheetAt(0);
        CellReference cellReference = new CellReference("A4");
        boolean flag = false;
        for (int i = cellReference.getRow(); i <= sheet.getLastRowNum(); ) {
            Row r = sheet.getRow(i);
            if (r == null) {
                // 如果是空行(即没有任何数据、格式),直接把它以下的数据往上移动
                sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
                continue;
            }
            flag = false;
            for (Cell c : r) {
                if (c.getCellType() != Cell.CELL_TYPE_BLANK) {
                    flag = true;
                    break;
                }
            }
            if (flag) {
                i++;
                continue;
            } else {//如果是空白行(即可能没有数据,但是有一定格式)
                if (i == sheet.getLastRowNum())//如果到了最后一行,直接将那一行remove掉
                    sheet.removeRow(r);
                else//如果还没到最后一行,则数据往上移一行
                    sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
            }
        }
        return sheet.getLastRowNum() + 1;
    }

2、测试

public static void main(String[] args) throws IOException, InvalidFormatException {
            String path ="E:\\file\\2.0\\sc\\0101010330202\\0101010330202.xlsx";
            int rows = getVaildRows(path);
            System.out.println("总行数:"+rows);
}

输出结果:
总行数:21

相关文章

网友评论

      本文标题:Java & 利用POI 读取指定excel的真实行数

      本文链接:https://www.haomeiwen.com/subject/ladeuktx.html