2015-12-08 236 views
1

我有一個excel文件,它有幾個字符串數據類型列,一個數字列和一個日期列。我正在使用Apache POI來讀取文件。 下面是我如何處理數據類型在Java中使用POI讀取Excel

Cell cell = sheet.getRow(i).getCell(j); 

       if(cell!=null){ 
        switch(cell.getCellType()){ 
        case Cell.CELL_TYPE_STRING: 
         cellValue = cell.getStringCellValue(); 
         break; 
        case Cell.CELL_TYPE_NUMERIC: 
         DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
         Date cellDate = cell.getDateCellValue(); 
         cellValue = df.format(cellDate); 
         break;       
        case Cell.CELL_TYPE_BLANK: 
         break; 
        default : 
        }      
       } 

這正常工作與字符串和日期數據類型。但對於數字,它將該值轉換爲日期。我知道這是因爲處理有問題。你可以請教如何適應數字和日期數據類型的處理?

謝謝, 山姆。

+1

爲什麼不直接使用[DataFormatter](http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html)將單元格變成字符串,並讓它處理你的複雜性? – Gagravarr

回答

2

如果你知道什麼樣的數據類型屬於每個列,你甚至不必每次檢查電池類型:

switch (columnIndex) { 
    case 0: 
    case 1: 
    case 2: { 
     cellValue = cell.getStringCellValue(); 
     break; 
    } 
    case 3: { 
     Date cellDate = cell.getDateCellValue(); 
     // ... 
     break; 
    } 
    case 4: { 
     cellValue = cell.getNumericCellValue(); 
     break; 
    }  
} 

如果列可以同時包含數字和日期,你可以試試這個

import org.apache.poi.ss.usermodel.DateUtil; 

case Cell.CELL_TYPE_NUMERIC: 
    if (DateUtil.isCellDateFormatted(cell)) { 
     // your code for date handling 
    } else { 
     cellValue = cell.getNumericCellValue(); 
    } 
+0

感謝Adam!工作就像一個魅力:) – Sam

相關問題