Jump to content


Photo

Formato de fecha en Exportación a Excel


  • Please log in to reply
7 replies to this topic

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 08 March 2012 - 04:29 PM

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
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 08 March 2012 - 04:54 PM

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 posts
  • LocationMéxico

Posted 08 March 2012 - 04:59 PM

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
  • 14448 posts
  • LocationMéxico

Posted 08 March 2012 - 05:11 PM

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
  • 1092 posts
  • LocationMurcia, España

Posted 12 March 2012 - 03:34 AM

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
  • 3486 posts
  • LocationMexico City

Posted 14 March 2012 - 04:36 PM

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
  • 14448 posts
  • LocationMéxico

Posted 14 March 2012 - 04:55 PM

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
  • 3486 posts
  • LocationMexico City

Posted 14 March 2012 - 04:58 PM


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.