Ir al contenido


Foto

Formato de fecha en Exportación a Excel


  • Por favor identifícate para responder
7 respuestas en este tema

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 08 marzo 2012 - 04:29

Buenas tardes a todos chicos y chicas...

Vengo aquí con un ligerísimo detallín que no sé cómo resolver sobre una exportación de datos a excel...

Para generar la exportación utilizo una clase especialmente hecha para ello por el buen Egostar pero que ahora me veo en la necesidad de modificar para hacer unos cambiecitos mínimos de formato...

Este es parte del código donde valida el tipo de campo:



delphi
  1. case Data_Type of
  2. ....
  3. ...
  4. ...
  5. ... 
  6.     ftTimeStamp,ftDateTime :
  7.     begin
  8.       FXLRange.NumberFormat := '@';
  9.       FXLRange.HorizontalAlignment := Alineacion;
  10.       if Field_Value = null then
  11.         Valor := ''
  12.       else
  13.         Valor := FormatDateTime(TDateTimeField(xlDataSet.Fields[Cell_Col-1]).DisplayFormat, Field_Value));  //Aquí da formato al valor del campo
  14.     end;



El detalle con ésto es que el usuario que general el reporte quiere ver en las celdas la fecha con formato de fecha y no de texto que es como se genera... Intenté con ésto:



delphi
  1.   Valor := StrToDate(FormatDateTime(TDateTimeField(xlDataSet.Fields[Cell_Col-1]).DisplayFormat, Field_Value));



Pero ahora me manda el valor de la celda en formato de fecha pero numérico (40911, 40912, 40913... etc)

Alguna idea que pueda utilizar para darle formato de dd/mm/yyyy pero dejando el formato del valor de la celda como fecha y no como texto ???  *-)

Saludox y gracias por su ayuda :)




  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 08 marzo 2012 - 04:54

Según recuerdo, en Excel puedes teclear directamente (por ejemplo, 08/03/2012) o hacer la transformación desde el Ctrl+F1 a la(s) celda(s) involucrada(s).

Tomando la primera opción, yo le haría FormatDateTime('dd/mm/yyyy',dLaFecha) al dato correspondiente. Ahora que si prefieres la segunda opción, el usuario tendría el mando y como que no es buena idea.
  • 0

#3 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 08 marzo 2012 - 04:59

En donde dice FormatNumber:='@' coloca esto:



delphi
  1. FormatNumber:='dd/mm/yyyy'.



y en Valor haz algo como esto:



delphi
  1. Valor:=FormatToStr(Field_Value)



Saludos
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 marzo 2012 - 05:11

Hola, tan cerca y tan lejos :p



delphi
  1. case Data_Type of
  2. ....
  3. ...
  4. ...
  5. ... 
  6.     ftTimeStamp,ftDateTime :
  7.     begin
  8.       FXLRange.NumberFormat := '[$-409]dd-mm-yyyy;@';
  9.       FXLRange.HorizontalAlignment := Alineacion;
  10.       if Field_Value = null then
  11.         Valor := 0
  12.       else
  13.         Valor := Field_Value;
  14.     end;



:)

Saludos

PD; Se me adelantó amigo Héctor :)

  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 12 marzo 2012 - 03:34

Excel espera recibir las fechas por COM en formato americano si se lo envias como texto, ya veo que te han dado codigo para enviarlo como un valor numerico modificando el formato del rango antes, si lo quieres enviar en modo texto y con formato del rango "general", yo lo hago así:



delphi
  1. var
  2.   MyDate: TDate;
  3.   AmericanFormat: TFormatSettings;
  4. begin
  5.   //Formato americano:
  6.   GetLocaleFormatSettings( 0, AmericanFormat);
  7.   AmericanFormat.ThousandSeparator:= ',';
  8.   AmericanFormat.DecimalSeparator:=  '.';
  9.   AmericanFormat.ShortDateFormat:=  'mm/dd/yyyy';
  10.   //Envio fecha a un rango como texto:
  11.   FXLRange.Value:= FormatDateTime('ddddd', MyDate, AmericanFormat);
  12. end;



Lo del formato americano lo dejo creado en mi app y de esa forma el envio de fechas es solo una linea.

Si quieres mas trucos sobre el uso de excel u openoffice desde delphi, echale un vistazo a esta unidad:

http://user.services...=219641#p219641
  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 marzo 2012 - 04:36

Muchas gracias a todos por su ayuda... al final lo hice casi como me dijo Héctor Randolph con dos pequeños cambiecitos...



delphi
  1. ftTimeStamp,ftDateTime :
  2.     begin
  3.       FXLRange.NumberFormat := 'dd/mm/aaaa';  // aaaa en vez de yyyy
  4.       FXLRange.HorizontalAlignment := Alineacion;
  5.       if Field_Value = null then
  6.         Valor := ''
  7.       else
  8.         Valor := DateToStr(Field_Value);  // DateToStr en vez de FormatToStr
  9.     end;



Esos cambios nos me generarán problemas más adelante ???... no sé, digamos, por las versiones de excel o el idioma del SO ???  :embarrassed:

Saludox ! :)

  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 marzo 2012 - 04:55

Esos cambios nos me generarán problemas más adelante ???... no sé, digamos, por las versiones de excel o el idioma del SO ???  :embarrassed:


Nada más no lo metas a la Interfaz 6 y no habrá problemas :D :D :D

Saludos :p
  • 0

#8 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 marzo 2012 - 04:58


Esos cambios nos me generarán problemas más adelante ???... no sé, digamos, por las versiones de excel o el idioma del SO ???  :embarrassed:


Nada más no lo metas a la Interfaz 6 y no habrá problemas :D :D :D

Saludos :p


Oooooooppsssss !!!!!!!

:embarrassed:

Jajajajajajajaja no temas !!!!!  8o| 8o| 8o| 8o|

:angel:  :wink:

Saludox ! :)
  • 0




IP.Board spam blocked by CleanTalk.