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?
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.
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With