Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read Excel cell having Date with Apache POI?

I'm using Apache POI 3.6, I want to read an excel file which has a date like this 8/23/1991.

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

But it takes the numeric value type and returns the value like this 33473.0.

I've tried to use Numeric Cell Type although with no luck.

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

How can I fix my problem?

like image 987
Venkat Avatar asked Jun 30 '10 10:06

Venkat


People also ask

How does Apache POI read date value in Excel?

If you know which cell i.e. column position say 0 in each row is going to be a date, you can go for row. getCell(0). getDateCellValue() directly. UPDATE: Here is an example - you can apply this in your switch case code above.

How do you check if a cell in Excel has a date?

You can use the =Cell("format",cell address) formula to establish the format of the cell. Anything starting with a "D in the result is a proper date or time format.


2 Answers

NOTE: HSSFDateUtil is deprecated

If you know which cell i.e. column position say 0 in each row is going to be a date, you can go for row.getCell(0).getDateCellValue() directly.
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()

UPDATE: Here is an example - you can apply this in your switch case code above. I am checking and printing the Numeric as well as Date value. In this case the first column in my sheet has dates, hence I use row.getCell(0).

You can use the if (HSSFDateUtil.isCellDateFormatted .. code block directly in your switch case.

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

The output is

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 
like image 198
JoseK Avatar answered Sep 18 '22 16:09

JoseK


Yes, I understood your problem. If is difficult to identify cell has Numeric or Data value.

If you want data in format that shows in Excel, you just need to format cell using DataFormatter class.

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  
like image 35
Chintan Avatar answered Sep 21 '22 16:09

Chintan