2012-05-16 15 views
10

Estoy usando la biblioteca apache poi para leer el archivo Excel. Estoy atascado mientras leo la celda de contraseña. Si el usuario da la fecha como una contraseña en la celda de contraseña, es decir, 16/05/2012. Estoy leyendo este valor como "41045", mientras que el valor debe ser "16/05/2012". Este es mi código:Lectura del valor de fecha de la celda excel como una cadena

cell = row.getCell(); // date in the cell password '16/05/2012' 
switch (cell.getCellType()) { 

case HSSFCell.CELL_TYPE_STRING: 
    cellValue = cell.getRichStringCellValue().getString(); 
    break; 
case HSSFCell.CELL_TYPE_NUMERIC: 
    if(cellCount == TEMPLATE_PASSWORD) {// if cell is password 
     cell.setCellType(Cell.CELL_TYPE_STRING); 
     cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012" 
    } 
    break; 
default: 
} 

¿Alguien puede ayudarme con esto?

Gracias.

+0

echa un vistazo a este hilo, es casi lo mismo con su problema. http://stackoverflow.com/questions/3148535/how-to-read-excel-cell-having-date-with-apache-poi –

+0

@mashhur En su enlace, no hay solución de acuerdo con mis requisitos. –

+0

Creo que recibe número en lugar de cadena porque el tipo de celda es numérico. ¿Estás seguro de que el tipo numérico es correcto para la celda de contraseña? – ImLearning

Respuesta

14

La clase que se está buscando los puntos de interés es DataFormatter

Cuando Excel escribe el archivo, algunas células se almacenan como cadenas literales, mientras que otros se almacenan como números (incluyendo fechas). Para este último, un valor de punto flotante que representa la celda se almacena en el archivo, de modo que cuando se le pregunta al POI por el valor de la celda, eso es lo que realmente tiene.

Sin embargo, algunas veces, especialmente al hacer extracción de texto (pero no siempre), desea que el valor de la celda se vea como en Excel. No siempre es posible obtener eso exactamente en un String (relleno de espacio no completo, por ejemplo), pero la clase DataFormatter te acercará.

También tenga en cuenta que en Excel, las fechas se almacenan como números en coma flotante desde ~ 1900, por lo que está viendo un número que no es una fecha. Use DataFormatter (o similar) para que se represente como una fecha

+0

Bueno, revisé DataFormatter, formatearé la cadena de fecha, es decir, "41045" en " 16/05/2012 ". Pero, ¿y si el usuario ingresa una cadena como "16/05/2012"? aquí tendré la misma cadena de fecha "41045", pero según la lógica se convertirá a "16/05/2012" y no a "16/05/2012". O ¿cómo sé qué formato ingresa el usuario? –

+0

Cuando el usuario introduce un valor en la celda, se le aplica un formato (automática o explícitamente), que es lo que se utiliza para representarlo. DataFormatter simplemente renderizará la celda basándose en el formato que sea. – Gagravarr

4

La prefijado del valor de la celda con a 'mientras se guarda en xls lo convierte en una celda de cadena. Entonces, lo que leas de esa celda se tratará como una cadena y se leerá como está.

+1

Esta solución requiere que el usuario, que ingresa los datos, lo sepa y lo recuerde por el bien del programa (que tal vez ni siquiera conozca) – Attila

5

Use el siguiente código para obtener el formato de fecha exacta ingresado en la hoja de Excel.

DataFormatter df = new DataFormatter(); 
stringCellValue = df.formatCellValue(cell); 
+0

Eso es lo que llamo una respuesta práctica. ¡Gracias! –

Cuestiones relacionadas