PDA

Ver la Versión Completa : Error al exportar a excel: campo fechas


identsoft
16-03-2022, 11:49:19
Un saludo para todos.
Tengo un programa que hace una exportación de datos de un dbgrid a Excel en formato csv
El proceso lo hace bien porque compruebo los datos traspasados (reviso el fichero csv con bloc de notas y está en formato 'dd-mm-yyyy') y están correctos. En mi version de Word 2007 aparece bien, en libreofice calc tambien.
Pero en algún cliente(en concreto en uno), el campo fecha se altera, se cambia 'dd/mm/yyyy' por 'mm/dd/yyyy' P.e. se traspasa un campo fecha '01/02/2022' pero en su excel aparece como '02/01/2022'.

Supongo que será un problema del cliente porque en otros ordenadores el traspaso se hace correctamente.
He mirado la configuración tanto regional como fecha y hora de su sistema y está igual que en los ordenadores que muestran ese campo correctamente.

¿A alguien le ha pasado algo parecido?. ¿Es un problema de diferentes versiones de Excel?. Hay que tocar algo de la configuración de Excel?.¿Que hay que tocar?

Se exporta así:

...
WorkSheet.cells[i,1] := CDSListFacNUM_FACT.AsInteger;
WorkSheet.cells[i,2].value := FormatDateTime('dd-mm-yyyy', Trunc(CDSListFacFEC_FACT.AsDateTime));
WorkSheet.cells[i,3] := CDSListFacNombreCli.AsString;
...


He probado a cambiar el carácter separador de día, mes y año y el resultado es el mismo.
La versión del cliente es la Word 2021.

Gracias por vuestro tiempo.

fjcg02
16-03-2022, 13:55:46
Me pasaba lo mismo.

Lo peor es que en algunos casos depende de si el mes es mayor o menor a 12, hace el cambio o no.

Yo lo arreglé con el formato de fecha YYYY-MM DD HH:MI. Lo pones en la misma consulta y ya está.

No conseguí solucionarlo cambiando la configuración del excel.

Saludos

carnace
17-03-2022, 09:23:13
Creo que el problema es que la función FormatDateTime te devuelve un string. Excel te lo va a intentar convertir a fecha, pero si lo que quieres almacenar en la celda de Excel es un string, le colocas apóstrofos antes de la variable ('''' + FormatDateTime('dd-mm-yyyy', Trunc(CDSListFacFEC_FACT.AsDateTime)); ).
Si deseas que se almacene como fecha, pues deber utilizar una variable TDateTime (lo que yo suelo usar es FechaCorte : TDateTime; y luego Excel.Sheets[1].Cells[k+3, 22] := FechaCorte;).
No está demás recordar que Excel no permite representar fechas anteriores al 01/01/1900, por lo que hay que estar pendiente de estas limitaciones, sobre todo cuando el motor de base de datos sí permite un rango de fechas más amplio. A mi por ejemplo, me pasó que tenía que escribir en Excel cosas como: Atenciones4505[1].ConsultaGestante := '1845-01-01' y por esto me tocó escribir esa variable en excel como texto.

identsoft
23-03-2022, 09:39:11
Gracias fjcg02 y carnace por vuestro tiempo.
Perdón por el retraso , pero hemos tenido unos cuantos días de fiesta aquí en Valencia(Spain).
He adoptado la solución de fjcg02. Cambiando el formato de fecha a YYYY-MM-DD ya funciona bien.

Un saludo