2014-01-15 179 views
0

我的Excel工作表中有以下數據使用Apache POI

1234556 gold 
1234456 silver 
null  null 
4455455 platinum 

我將如何讀取使用缺少cellpolicies這整個空行讀取數據之間的空行?我嘗試使用缺少cellpolicy編碼,但無法獲得所需的輸出。

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行上面的空行留下第四行打印..?幫我

+0

如你提到的那樣,你是否將空值填入excel文件的單元格中? – CycDemo

+0

沒有它只是表示行是空白的 – akash

回答

0

我使用的Apache POI很久以前,但看空單元格我做了這樣的事情

Cell cell=row.getCell(index); 
if(cell!=null && cell.toString().isEmpty){ 
System.out.println("The cell is empty"); 
} 

而且爲了獲得最後一排,讓你知道叩頭很多的最大列數有:sheet.getLastRowNum()

因此,現在您只需獲取第一行的索引,並從第一行開始循環。先獲取行然後再獲取單元格,您也會獲得空單元格,但是您可以決定如何處理它們。

0
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

似乎除了您使用的for循環外,一切正常。

,而不是for (int rowNum = rowStart; rowNum < rowEnd; rowNum++)

您到達最後一排前,應使用for (int rowNum = rowStart; rowNum <= rowEnd; rowNum++)

其實循環正在退出。記住rowEnd,因爲我的理解只不過是sheet.getLastRowNum();而且它基於零索引。所以在這種情況下,當你實際上有4行時,它會給你3個,並且在執行時,循環僅針對行0,行1,行2執行,然後退出。