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

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。getPhysicalNumberOfCells读取excel表格数据,清除空行后代码仍然识别空行,(已解决),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

 

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

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

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

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

可以使用以下代码删除空行,得到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数据的真实有效行数

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/198872.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!