2010-06-28 222 views
6

我使用Apache POI 3.6。我有一列是空白。我希望能夠閱讀它,然後轉到下一欄。即使我能解決NullPointerException問題,我也無法進入下一個單元格。如何在Java中讀取具有空值的Excel單元...?

這裏是我的代碼片段:

HSSFCell cell = row.getCell(c); 
String value = null; 

switch (cell.getCellType()) { 

    case HSSFCell.CELL_TYPE_FORMULA: 
     value = "FORMULA value=" + cell.getCellFormula(); 
     break; 

    case HSSFCell.CELL_TYPE_NUMERIC: 
     value = "NUMERIC value=" + cell.getNumericCellValue(); 
     break; 

    case HSSFCell.CELL_TYPE_STRING: 
     value = "STRING value=" + cell.getStringCellValue(); 
     break; 

    case HSSFCell.CELL_TYPE_BLANK: 
     value=""; 
     break; 

    case HSSFCell.CELL_TYPE_ERROR: 
     value="error"; 
     break; 

    default: 
     break; 
} 

System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE=" + value); 

我怎樣才能解決我的問題呢?

回答

5

好了,你可以在你的開關語句之前檢查空,或者你可以更改爲排它的呼叫.getCell你做的。檢查Javadoc的POI有兩種形式,第一種是您正在使用的,第二種是附加參數,類型爲Row.MissingCellPolicy,您可以在其中傳遞可自動將空單元格轉換爲空格的值。

+0

嗨mezmo,非常感謝。我已經嘗試了你的建議,並得到了它.. – Venkat 2010-06-29 15:00:57

2

您需要檢查是否cell!=null,因爲如果一個單元格不連續存在,row.getCell(c)回報null

+0

作爲 '細胞' 是一個對象,要獲得值 '==' 或「!據我所知,不能使用'='運算符。不是嗎?但單元格實際存在,但它有一個「空白」值,即沒有值。 – Venkat 2010-06-29 14:28:04

+0

您可以使用==或!=來檢查空值,這是您應該做的。單元最有可能不存在(在數據結構中),這就是爲什麼你有NullPointerException問題。 – 2010-06-30 06:30:37

8

我終於得到了我想要的。我感謝mezmo。 我想分享要更改的確切代碼段。 只需更換線路有:

HSSFCell cell = row.getCell(c); 

HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK); 
0

試試這個

List cellDataList = new ArrayList(); 
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream); 

         XSSFSheet sheet = workbook.getSheetAt(0); 

         Iterator rows = sheet.rowIterator(); 

         int number=sheet.getLastRowNum(); 


         int lineNumber = 0; 

         while (rows.hasNext()) 

         { 
          XSSFRow row = ((XSSFRow) rows.next()); 
          lineNumber++; 
          if(lineNumber==1){continue;} 




          Iterator cells = row.cellIterator(); 
          List cellTempList = new ArrayList();  
          int current = 0, next =1; 
          while(cells.hasNext()) 

          { 

           XSSFCell cell = (XSSFCell) cells.next(); 


           current = cell.getColumnIndex(); 


           if(current<next){ 

           } 
           else{ 

            int loop = current-next; 

            for(int k=0;k<loop+1;k++){ 

             cellTempList.add(null); 
             next = next + 1; 
            } 
           } 
           switch (cell.getCellType()) { 
              case Cell.CELL_TYPE_STRING: 
               System.out.println(cell.getRichStringCellValue().getString()); 
               cellTempList.add(cell.getRichStringCellValue().getString()); 
               break; 
              case Cell.CELL_TYPE_NUMERIC:              
                System.out.println(cell.getNumericCellValue()); 
                cellTempList.add(String.valueOf(cell.getNumericCellValue()));             
               break; 
              case Cell.CELL_TYPE_BOOLEAN: 
               System.out.println(cell.getBooleanCellValue()); 
               break; 
              case Cell.CELL_TYPE_FORMULA: 
               System.out.println(cell.getCellFormula()); 
               cellTempList.add(cell.getCellFormula()); 
               break;            

              default: 
               System.out.println("Inside default"); 
           } 
           next = next + 1; 

          } 
          cellDataList.add(cellTempList); 
         } 
相關問題