表格只有几十行数据,但是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数据的真实有效行数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/198872.html