getPhysicalNumberOfCells读取excel表格数据,清除空行后代码仍然识别空行,(已解决)

 

表格只有几十行数据,但是getPhysicalNumberOfCells读取时还有800多行,

原因在于之前把表格数据拓展到了800行,清除数据时,表格的样式为更改,可以尝试使用格式刷复制空行格式刷到错误空行上

但是我试了没有用,反而还多了几十行,然后尝试用代码判断空行,只有格式没有数据的空行全部删除,才终于得到了原本的行数

可以使用以下代码删除空行,得到excel原本的行数

public static void checkRow(File file){
        try {
            InputStream inputStream = new FileInputStream(file);
            Workbook workbook = WorkbookFactory.create(inputStream);
            Sheet sheet = workbook.getSheetAt(0);
            //获取sheet的行数
            int rows = sheet.getLastRowNum() + 1;
            System.out.println("使用poi自带的getLastRowNum方法获取的行数为:" + rows);
            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() == STRING ||
                            c.getCellType() == NUMERIC ||
                            c.getCellType() == BOOLEAN ||
                            c.getCellType() == FORMULA ||
                            c.getCellType() == ERROR) {
                        flag = true;
                        break;
                    }
                }
                if (flag) {
                    i++;
                    continue;
                } else {//如果是空白行(即可能没有数据,但是有一定格式)
                    if (i == sheet.getLastRowNum()) {//如果到了最后一行,直接将那一行remove掉
                        sheet.removeRow(r);
                    } else {//如果还没到最后一行,则数据往上移一行
                        sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
                    }
                    //写入excel
                    FileOutputStream os = new FileOutputStream(file);
                    workbook.write(os);
                }
            }
            System.out.println("校验空值后得到的行数为:" + (sheet.getLastRowNum() + 1));
        } catch (Exception e) {
            System.out.println("获取异常信息:"+e.getMessage());
        }
    }




以上代码参考于java 利用POI 读取Excel数据的真实有效行数

 

posted @ 2023-05-11 20:26  Neo_y  阅读(970)  评论(0)    收藏  举报