表格只有几十行数据,但是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数据的真实有效行数
标签:空行,读取,表格,代码,excel,getPhysicalNumberOfCells,行数 From: https://www.cnblogs.com/neo-y/p/17392162.html