Reading date values from excel cell using POI HSSF API

六月ゝ 毕业季﹏ 提交于 2019-11-26 13:02:55

问题


I\'m using POI HSSF API for my excel manipulations in Java. I\'ve a date value \"8/1/2009\" in one of my excel cell and while I try to read this value using HSSF API, it detects the cell type as Numeric and returns the \'Double\' value of my date. See the sample code below:

cell = row.getCell(); // date in the cell \'8/1/2009\'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    cellValue = new Double(cell.getNumericCellValue()).toString();
    break;
default:
}

Cell.getCellType() returns NUMERIC_TYPE and thus this code converts the date to double! :(

Is there any way to read the date as it is in HSSF POI !?


回答1:


You could take a look at:

HSSFDateUtil.isCellDateFormatted()

See the POI Horrible Spreadsheet Format API for more details on HSSFDateUtil:

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html

That also provides some helper methods for returning Excel getExcelDate() and Java dates getJavaDate(). You need to be somewhat wary of different date formats though...




回答2:


If you want to reference the date in the same format in as in the Excel file, you should use the CellDateFormatter. Sample code:

CellValue cValue = formulaEv.evaluate(cell);
double dv = cValue.getNumberValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
    Date date = HSSFDateUtil.getJavaDate(dv);

    String dateFmt = cell.getCellStyle().getDataFormatString();
    /* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as 
    Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java 
    will always be 00 for date since "m" is minutes of the hour.*/

    strValue = new CellDateFormatter(dateFmt).format(date); 
    // takes care of idiosyncrasies of Excel
}



回答3:


Excel treats dates and times as numbers... Jon said it better, so I won't echo him here...

However, sample code for what you've put in the question is at http://poi.apache.org/spreadsheet/quick-guide.html#CellContents




回答4:


If you using the POI 3.5 you can use the following

cell.getDateCellValue() method. This will work for excel 2007 as well.




回答5:


Since POI 3.15 beta3 some functions are deprecated. You can check data format and retrieve as Java Date.

SimpleDateFormat format = new SimpleDateFormat("");
String cellValue;
if(cell != null && cell.getCellTypeEnum() != CellType.STRING &&
    cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){

    cellValue = format.format(cell.getDateCellValue());
}


来源:https://stackoverflow.com/questions/861877/reading-date-values-from-excel-cell-using-poi-hssf-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!