2010-06-30 123 views
42

我正在使用Apache POI 3.6,我想读取一个有这样的日期的Excel文件8/23/1991如何阅读带有Apache POI日期的Excel单元格?

switch (cell.getCellType()) { 

    ... 
    ... 

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

    ... 

} 

但它需要数值类型并返回像这样的值33473.0

我试过使用数字单元格类型,虽然没有运气。

dbltemp=row.getCell(c, Row.CREATE_NULL_AS_BLANK).getNumericCellValue(); 

if (c == 6 || c == 9) { 
    strTemp= new String(dbltemp.toString().trim()); 

    long tempDate = Long.parseLong(strTemp); 
    Date date = new Date(tempDate); 

    strVal = date.toString(); 
} 

我该如何解决我的问题?

回答

81

如果您知道哪一个单元即列位置在每一行中说0将是日期,那么您可以直接使用 row.getCell(0).getDateCellValue()
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()

更新:下面是一个示例 - 您可以将其应用于上面的开关盒代码中。我正在检查并打印数字以及日期值。在这种情况下,我的工作表中的第一列有日期,因此我使用row.getCell(0)。

您可以直接在您的开关盒中使用if (HSSFDateUtil.isCellDateFormatted ..代码块。

if (row.getCell(0).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) 
    System.out.println ("Row No.: " + row.getRowNum()+ " " + 
     row.getCell(0).getNumericCellValue()); 

    if (HSSFDateUtil.isCellDateFormatted(row.getCell(0))) { 
     System.out.println ("Row No.: " + row.getRowNum()+ " " + 
      row.getCell(0).getDateCellValue()); 
    } 
} 

输出是

Row No.: 0 39281.0 
Row No.: 0 Wed Jul 18 00:00:00 IST 2007 
Row No.: 1 39491.0 
Row No.: 1 Wed Feb 13 00:00:00 IST 2008 
Row No.: 2 39311.0 
Row No.: 2 Fri Aug 17 00:00:00 IST 2007 
+0

我不能得到任何值...如果你可以指定一个代码片段,这将是伟大的... – Venkat 2010-06-30 13:32:26

+0

更新为icnlude我的代码 – JoseK 2010-07-01 05:16:46

+7

调用DateUtil.isCellDateFormatted()将这是从HSSF和XSSF中释放代码的一大步。通过使用全局父项而不是XLS/XLSX从属HSSF/XSSF子项,您可以使您的代码具有更高的通用性。 – 2014-05-31 11:25:03

1

您需要DateUtils:详情请参见this article。或者,更好的是,使用Andy Khan的JExcel而不是POI。

+0

我几乎在POI实现很多东西,我很抱歉,我不能去任何只为这个..一定有什么..然而,谢谢duffymo – Venkat 2010-06-30 13:34:40

+1

DateUtils将整理您如果你不能切换到JExcel – duffymo 2010-06-30 16:12:23

5

是的,我明白你的问题。 如果难以确定单元格是否具有数值或数据值。

如果你想要的数据格式在Excel中显示,你只需要使用DataFormatter类来格式化单元格。

DataFormatter dataFormatter = new DataFormatter(); 
String cellStringValue = dataFormatter.formatCellValue(row.getCell(0)); 
System.out.println ("Is shows data as show in Excel file" + cellStringValue); // Here it automcatically format data based on that cell format. 
// No need for extra efforts 
相关问题