2012-07-21 89 views
1

嗨,我想讀取與HSSFCell excel表值。我的專業是4列專業。日期,名稱,In_time和Out_time。閱讀時間使用Apache POI HSSFCell獲取錯誤

在我的循環

我已經給..

  HSSFRow row = (HSSFRow) itr.next(); 
      Iterator cell = row.cellIterator(); 
      List data = new ArrayList(); 
      while(cell.hasNext()) 
      { 
       HSSFCell value = (HSSFCell) cell.next(); 

       if (value.getCellType() == Cell.CELL_TYPE_NUMERIC) 
       { 
        if(HSSFDateUtil.isCellDateFormatted(value)) 
        { 
         if(HSSFDateUtil.isADateFormat((int)value.getNumericCellValue(), "dd:mmm:yyyy")) 
         { 
          DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
          String date = df.format(value.getDateCellValue()); 
          data.add(date); 
         } 
              } 
         else 

        { 
         data.add(value.getNumericCellValue()); 
        } 
       } 
       else if (value.getCellType() == Cell.CELL_TYPE_STRING) 
       { 
        data.add(value.getStringCellValue()); 
       } 
       else 
       { 
        data.add(""); 
       } 
      } 
      sheetData.add(data); 

領域迄今爲止ANS名稱是否正確retriveing。 但是,當我試圖獲得時間,它的給予如此日期的價值..例如在我的Excel中,我有時間4:05:12上午..但它採取的價值像一些日期,如1899-12-30。 如何從使用Apache POI的Excel工作表中讀取日期值..

回答

2

您似乎是通過調用SimpleDateFormat將單元顯式格式化爲「yyyy-MM-dd」日期。所以,你得到你要求的東西並且以yyyy-MM-dd日期字符串結束應該不會讓你感到意外!

目前,您明確YYYY-MM-DD碼,從你的問題採取,是有點奇怪:

if(HSSFDateUtil.isCellDateFormatted(value)) 
    { 
    if(HSSFDateUtil.isADateFormat((int)value.getNumericCellValue(), "dd:mmm:yyyy")) 
        { 
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
         String date = df.format(value.getDateCellValue()); 
         data.add(date); 
        } 

如果你想在單元格的格式,所以它看起來一樣,它在Excel中那樣,那麼您需要考慮應用於單元格的格式化規則。如果你這樣做,你的代碼反而會看起來像要簡單得多:

DataFormatter formatter = new DataFormatter(); 

..... 

if(HSSFDateUtil.isCellDateFormatted(value)) { 
    String date = formatter.formatCell(value); 
} 

單元是否應用了YYYY-MM-DD格式,那麼你仍然得到類似2012-07-20 。如果它是一種時間格式,那麼你會得到。

+0

BUt我該如何處理時間?當我試着像你說的,我有時間作爲字符串。但我的數據庫已經把它作爲時間,而不是var char – 2012-07-22 04:16:49

+0

你想要它作爲什麼?具體來說,你想要什麼Java對象? POI會給你單元格作爲日期,它有一個時間分量,或者你可以把它變成一個帶有上面的字符串,其中任何一個都可以適用於幾乎所有的事情 – Gagravarr 2012-07-22 10:36:41

+0

對不起我的朋友。你完全正確。謝謝你.. +100回答。 謝謝你 – 2012-07-22 10:44:55