使用POI读取excel文件,识别空行 您所在的位置:网站首页 wps表格去除数据中的空行怎么操作不了 使用POI读取excel文件,识别空行

使用POI读取excel文件,识别空行

2024-06-02 18:20| 来源: 网络整理| 查看: 265

场景:

         最近在做项目时,需要使用解析excel数据,我使用的是poi,这个时候遇到 poi 的大坑,读取数据时,不会过滤空行!是的,不会过滤空行,比如一份excel,原来有30条数据,从底下往上删除了20条,但当使用poi 解析的时候,还是读取到30行,阿西吧类,导致我后面的业务代码报错,网上的多个方法试了都无效,最终使用最土的方法暂时性的解决了这个问题。

 

解决思路:

       解析excel时,因为我们是有模板的,只要解析前面的几列,所以,我就想,既然我不能识别你空行,那我总能识别你一行里有几个空的单元格吧?如果这行的空单元格数量等于我需要判断的列数,那我就判定你这行是空的,说干就干,下面就是我的解决代码:

/** * 判断是否是空行 * @param row 行对象 * @param rowNum 需要判断的列数 * @return */ private static int getRowIsNull(Row row,int rowNum) { int num = 0; //空单元格的数量 for (int i = 0 ; i < rowNum ; i ++ ){ Cell cell = row.getCell(i); if (null == cell){ //判断这个行是否为空 num ++; }else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK){ //空值 num ++; } } return num; }

如上面那样判断,如果还有“漏网之鱼”,还可以继续添加条件进行判断,这种方法虽然土,但是暂时可以解决我的问题   啊哈哈哈

的Row 是 org.apache.poi.ss.usermodel.Row   对象,获取方式

Workbook wb0 = null; //判断当前excel是什么版本的文件 if (url.substring(url.length() - 4, url.length()).equals(".xls")) { wb0 = new HSSFWorkbook(fileIn); }else if (url.substring(url.length() - 5, url.length()).equals(".xlsx")) { wb0 = new XSSFWorkbook(fileIn); }else{ throw new ValidatorException("您上传的文件格式错误,请根据模板填写上传"); } //获取第一个表单数据 Sheet sht0 = wb0.getSheetAt(0); for (Row r : sht0) { //处理每一行的数据 }

2020-12-16 后续更新:

execl空行校验方法:

//判断row是否为空 public static boolean isRowEmpty(Row row) { if (null == row) { return true; } int firstCellNum = row.getFirstCellNum(); //第一个列位置 int lastCellNum = row.getLastCellNum(); //最后一列位置 int nullCellNum = 0; //空列数量 for (int c = firstCellNum; c < lastCellNum; c++) { Cell cell = row.getCell(c); if (null == cell || Cell.CELL_TYPE_BLANK == cell.getCellType()) { nullCellNum ++; continue; } cell.setCellType(Cell.CELL_TYPE_STRING); String cellValue = cell.getStringCellValue().trim(); if (StringUtils.isEmpty(cellValue)) { nullCellNum ++; } } //所有列都为空 if (nullCellNum == (lastCellNum - firstCellNum)) { return true; } return false; }

循环判断当前行的每一个列是否为空,如果均为空,则为空行,否则为非空行。

tips:

for循环中的Row获取它在excel 中的真实行数 : r.getRowNum() + 1



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有