2012-07-21 91 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