首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用apache poi读取数据之间的空行

使用apache poi读取数据之间的空行
EN

Stack Overflow用户
提问于 2014-01-15 18:52:26
回答 3查看 1.8K关注 0票数 0

我的excel表格有以下数据

代码语言:javascript
复制
1234556  gold  
1234456  silver  
null     null   
4455455  platinum

我将如何使用缺失的will策略读取整个空行?我尝试使用丢失的cellpolicy进行编码,但无法获得所需的输出。

代码语言:javascript
复制
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
            List cellTempList = new ArrayList();
            Row r = hssfSheet.getRow(rowNum);

            int lastColumn = Math.max(r.getLastCellNum(), 2);
            if(r.getRowNum()==0||r.getRowNum()<=i){
                continue; //just skip the rows if row number is 0 or 1
            }
            for (int cn = 0; cn < lastColumn; cn++) {
                Row row = hssfSheet.getRow(rowNum);
                Cell cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK);
                 // Cell cell = row.getCell(cn, Row.RETURN_NULL_AND_BLANK);

                //if(row.getCell(cn)==null){

                //cellTempList.add("Null");


                if(cell.getCellType()==cell.CELL_TYPE_NUMERIC && cell.getColumnIndex()==0 )
                {//call phone number validation method
                    DecimalFormat df = new DecimalFormat("#");
                    String cellValue=df.format(cell.getNumericCellValue());
                    cellTempList.add(cellValue.toString());
                    logger.debug("Adding cell having string to "+cellTempList);
                }
                else if(cell.getCellType()==Cell.CELL_TYPE_STRING)
                {//call string validation method
                    cellTempList.add(cell.toString());
                    logger.debug("Adding cell having string to "+cellTempList);

                }
                else{cellTempList.add(cell.toString()+"-");
                //errorList.add(cell.getErrorCellValue());
                errorList.add(cell.getRowIndex() + "$" + cell.getColumnIndex()+ "$"  );
                System.out.println(errorList);
                }

            }cellDataList.add(cellTempList);
        }

    } System.out.println(cellDataList);  

使用此代码,它只在空行上方打印2行,剩下第4行要打印。帮帮我

EN

回答 3

Stack Overflow用户

发布于 2014-01-15 19:24:07

我很久以前就使用过Apache POI,但是为了读取空单元格,我做了如下操作

代码语言:javascript
复制
Cell cell=row.getCell(index);
if(cell!=null && cell.toString().isEmpty){
 System.out.println("The cell is empty");
}

为了得到最后一行,你知道有多少最大列数:sheet.getLastRowNum()

所以现在你要做的就是得到第一行的索引,然后从第一行循环到最后一行。先获取行,然后获取单元格,也会得到空单元格,但您可以决定如何处理它们。

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 14:54:50

代码语言:javascript
复制
  private String getCellValue(Cell cell) {
        if (cell == null) {
            return null;
        }
        if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
            return cell.getStringCellValue();
        } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
            return cell.getNumericCellValue() + "";
        } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
            return cell.getBooleanCellValue() + "";
        }else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
            return cell.getStringCellValue();
        }else if(cell.getCellType() == Cell.CELL_TYPE_ERROR){
            return cell.getErrorCellValue() + "";
        } 
        else {
            return null;
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2014-01-16 17:59:07

看起来除了您使用的for循环之外,所有的东西都工作正常。

代替for (int rowNum = rowStart; rowNum < rowEnd; rowNum++)

您应该使用for (int rowNum = rowStart; rowNum <= rowEnd; rowNum++)

实际上,循环在到达最后一行之前就退出了。请记住,据我所知,rowEnd只不过是sheet.getLastRowNum();,它是基于零索引的。因此,在这种情况下,当你实际有4行时,它将只给你3行,在执行时,循环只对第0行、第1行、第2行执行,然后退出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21135426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档