He estado usando Apache POI durante algún tiempo para leer los archivos existentes de Excel 2003 mediante programación. Ahora tengo un nuevo requisito para crear archivos .xls completos en memoria (aún usando Apache POI) y luego escribirlos en un archivo al final. El único problema que se interpone en mi camino es el manejo de celdas con fechas.
Considere el siguiente código:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Cuando escribo el libro de trabajo que contiene esta celda en un archivo y lo abro con Excel, la celda se muestra como un número. Sí, me doy cuenta de que Excel almacena sus 'fechas' como el número de días desde el 1 de enero de 1900 y eso es lo que representa el número en la celda.
PREGUNTA: ¿Qué llamadas API puedo usar en POI para decirle que quiero que se aplique un formato de fecha predeterminado a mi celda de fecha?
Idealmente, quiero que la celda de la hoja de cálculo se muestre con el mismo formato de fecha predeterminado que Excel le habría asignado si un usuario hubiera abierto manualmente la hoja de cálculo en Excel y hubiera escrito un valor de celda que Excel reconoció como una fecha.
fuente
BuiltinFormats
que enumera todos los formatos estándar (no solo los formatos de fecha) que conoce Excel. Me quedo con uno de esos para usar como mi parámetro para elgetFormat()
método que se muestra en el fragmento de arriba.getCreationHelper()
se necesita? Estoy trabajando con Mule en este momento para generar un archivo de salida de Excel y, de hecho, pude usar elcreateDataFormat()
sin el asistente de creación y generé un archivo de Excel en mi prueba. ¿Hay alguna desventaja de no usarlo? ¡Gracias!mm/dd/yyyy
. Cuando uso cualquier otro formato, Excel muestra un errorFile error, some number formats may have been lost
, muestra elDate
tipo en Excel. No tengo ni idea de cómo se puede solucionar esto.Para configurar el tipo de Excel predeterminado Fecha (predeterminado en la configuración regional de nivel de sistema operativo / -> es decir, xlsx se verá diferente cuando lo abra una persona alemana o británica / y se marque con un asterisco si lo elige en el selector de formato de celda de Excel) debe:
Lo hice con xlsx y funcionó bien.
fuente
Este ejemplo es para trabajar con tipos de archivo .xlsx. Este ejemplo proviene de una página .jsp utilizada para crear una hoja de cálculo .xslx.
fuente
Estoy escribiendo mi respuesta aquí porque puede ser útil para otros lectores, que podrían tener un requisito ligeramente diferente al de quien preguntó aquí.
Preparo una plantilla .xlsx; todas las celdas que se llenarán con fechas, ya están formateadas como celdas de fecha (usando Excel).
Abro la plantilla .xlsx usando Apache POI y luego escribo la fecha en la celda, y funciona.
En el siguiente ejemplo, la celda A1 ya está formateada desde Excel con el formato
[$-409]mmm yyyy
, y el código Java se usa solo para completar la celda.Cuando se abre Excel, la fecha se formatea correctamente.
fuente
Este ejemplo de código se puede utilizar para cambiar el formato de fecha. Aquí quiero cambiar de aaaa-MM-dd a dd-MM-aaaa. Aquí
pos
está la posición de la columna.fuente
Para conocer la cadena de formato que usa Excel sin tener que adivinarla: cree un archivo de Excel, escriba una fecha en la celda A1 y formatéelo como desee. Luego ejecute las siguientes líneas:
Luego copie y pegue la cadena resultante, elimine las barras invertidas (por ejemplo, se
d/m/yy\ h\.mm;@
convierte end/m/yy h.mm;@
) y utilícela en el código http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells :fuente