java - tutorial - Lectura de los valores de fecha de la celda excel utilizando POI HSSF API
java read excel file xlsx (5)
Desde el POI 3.15 beta3 algunas funciones están en deprecated
. Puede verificar el formato de los datos y recuperarlos como Date
Java.
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());
}
Estoy utilizando POI HSSF API para mis manipulaciones de Excel en Java. Tengo un valor de fecha "01/08/2009" en una de mis celdas de Excel y mientras trato de leer este valor usando la API HSSF, detecta el tipo de celda como Numérico y devuelve el valor "Doble" de mi fecha. Vea el código de muestra a continuación:
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 () devuelve NUMERIC_TYPE y, por lo tanto, este código convierte la fecha en doble. :(
¿Hay alguna forma de leer la fecha tal como está en el POI de HSSF?
Excel trata las fechas y las horas como números ... Jon lo dijo mejor, así que no lo haré eco aquí ...
Sin embargo, el código de muestra para lo que has puesto en la pregunta está en http://poi.apache.org/spreadsheet/quick-guide.html#CellContents
Podrías echar un vistazo a:
HSSFDateUtil.isCellDateFormatted()
Consulte la API de formato de hoja de cálculo de POI Horrible para obtener más detalles sobre HSSFDateUtil:
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html
Eso también proporciona algunos métodos auxiliares para devolver Excel getExcelDate()
y fechas de Java getJavaDate()
. Sin embargo, debes ser cauteloso con los diferentes formatos de fecha ...
Si desea hacer referencia a la fecha en el mismo formato que en el archivo de Excel, debe usar CellDateFormatter. Código de muestra:
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
}
Si usa el POI 3.5, puede usar lo siguiente
Método cell.getDateCellValue () Esto también funcionará para Excel 2007.