2010-06-30 103 views
42

Estoy usando Apache POI 3.6, quiero leer un archivo de Excel que tenga una fecha como esta 8/23/1991.¿Cómo leer la celda de Excel que tiene Fecha con Apache POI?

switch (cell.getCellType()) { 

    ... 
    ... 

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

    ... 

} 

pero se necesita el tipo de valor numérico y devuelve el valor como esto 33473.0.

He intentado usar el tipo de celda numérica aunque sin suerte.

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

¿Cómo puedo solucionar mi problema?

Respuesta

81

Si sabe qué celda, es decir, la posición de la columna dice 0 en cada fila va a ser una fecha, puede ir por row.getCell(0).getDateCellValue() directamente.
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()

ACTUALIZACIÓN: Aquí hay un ejemplo: puede aplicar esto en el código de su caja de interruptores de arriba. Estoy verificando e imprimiendo el valor numérico así como el valor de la fecha. En este caso, la primera columna de mi hoja tiene fechas, por lo tanto, uso row.getCell (0).

Puede usar el bloque de código if (HSSFDateUtil.isCellDateFormatted .. directamente en su caja del interruptor.

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

La salida es

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 
+0

No puedo obtener ningún valor ... Si pudiera especificar un fragmento de código, sería genial ... – Venkat

+0

actualizado para incluir mi código – JoseK

+7

Llamar a DateUtil.isCellDateFormatted() será un paso adelante en la forma de liberar su código de los HSSF y XSSF. Al utilizar padres globales en lugar de niños HSSF/XSSF dependientes de XLS/XLSX, puede hacer que su código sea mucho más universal. –

1

Necesita el DateUtils: vea this article para más detalles.

O, mejor aún, utilice el JExcel de Andy Khan en lugar de POI.

+0

casi he implementado muchas cosas en el PDI, Cuanto lo siento que no puedo ir a cualquier sólo para este .. Debe haber algo .. Sin embargo, gracias a que duffymo – Venkat

+1

DateUtils que va a clasificar Si no puede cambiar a JExcel – duffymo

5

Sí, he entendido su problema. Si es difícil de identificar, la celda tiene valores numéricos o de datos.

Si desea datos en formato que muestra en Excel, solo necesita formatear la celda utilizando la clase 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 
Cuestiones relacionadas