如何阅读具有Apache POIdate的Excel单元格?

我使用的是Apache POI 3.6,我想阅读一个有这样的date的Excel文件,这是8/23/1991

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

但是它需要数字值types并返回像这样的值33473.0

我试过使用数字单元格types,但没有运气。

 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(); } 

我该如何解决我的问题?

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

更新:这是一个例子 – 你可以在你的开关案例代码上面应用这个。 我正在检查并打印数字以及date值。 在这种情况下,我的工作表中的第一列有date,因此我使用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 

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

如果你想要的数据格式在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 

你需要DateUtils:看到这篇文章的细节。

或者,更好的是,使用Andy Khan的JExcel而不是POI。