Ir al contenido


Foto

[RESUELTO] Configurar Celda de Excel con Delphi


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

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 enero 2011 - 01:18

Pues eso. Como puedo configurar la categoría del formato de una celda de Excel (boton derecho en la celda --> formato de celda --> Número --> Categoría:) pero con Delphi :)

Actualmente estoy utilizando éste código.



delphi
  1.         ExcelRange.NumberFormat := '@';



Sin embargo, me asigna la celda con Formato con la categoría Texto y lo que necesito es asignarlo con la categoría General, ¿ alguien sabe como ?

Por cierto, estoy utilizando la unidad Excel2000.

Espero haberme explicado bien.

Salud OS
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 28 enero 2011 - 09:35

En Realidad el símbolo @ indica que es de formato Texto, simplemente pones General y ya:



delphi
  1. var Formato: OleVariant;
  2. begin
  3.   Formato := 'General';
  4.   ExcelRange.NumberFormat := Formato;
  5. end;



Saludos.

  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 enero 2011 - 10:39

Gracias amigo, he probado con eso y me da un error de Formato no reconocido.... sigo probando (y)

Salud OS
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 enero 2011 - 01:12

Bueno, pues actualizando este asunto, después de una sesión técnica muy provechosa con cHackAll y el sabio consejo de enecumene he podido solucionar mi problema. Pues nada, que aquí está el tremendo cambio a mi código......

ANTES


delphi
  1.         ExcelRange.NumberFormat := '@';



DESPUES


delphi
  1.         // ExcelRange.NumberFormat := '@';



:undecided: :embarrassed: :cheesy:

Salud OS
  • 0

#5 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 28 enero 2011 - 02:10

:D que bueno, gracias por el truco :p

Aparte de todo, es válido profundizar la explicación de enecumene, eso no lo sabía (y)


Saludos!
  • 0

#6 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 mensajes

Escrito 29 enero 2011 - 05:06

Bueno, pues actualizando este asunto, después de una sesión técnica muy provechosa con cHackAll y el sabio consejo de enecumene he podido solucionar mi problema. Pues nada, que aquí está el tremendo cambio a mi código......

ANTES


delphi
  1.         ExcelRange.NumberFormat := '@';



DESPUES


delphi
  1.         // ExcelRange.NumberFormat := '@';



:undecided: :embarrassed: :cheesy:

Salud OS

No me he enterado de la película, ¿quieres decir que ahora Excel te asigna la categoría correcta? ¿Es porque le pasas un variant como puso enecumene? Teniendo en cuenta que General se escribe igual en español que en inglés ¿hay que escribir la categoría en inglés? ¿qué te comentó cHackAll que no has publicado aquí?  *-) ¿no hace falta expecificar nada y Excel ya interpreta el formato correcto?  :| :| :|  Me interesa el asunto ya que hace un año tuve problemas en el paso a Excel de unas fechas que dependiendo de la máquina (la configuración del formato fecha en Windows), Excel las tomaba como texto unas veces y como fecha en otras.

Sin aclarar estas dudas solicito formalmente se retire el cartelito de RESUELTO  :p :p :p :D

Saludos
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 29 enero 2011 - 07:48

No me he enterado de la película, ¿quieres decir que ahora Excel te asigna la categoría correcta? ¿Es porque le pasas un variant como puso enecumene? Teniendo en cuenta que General se escribe igual en español que en inglés ¿hay que escribir la categoría en inglés? ¿qué te comentó cHackAll que no has publicado aquí?  *-) ¿no hace falta expecificar nada y Excel ya interpreta el formato correcto?  :| :| :|  Me interesa el asunto ya que hace un año tuve problemas en el paso a Excel de unas fechas que dependiendo de la máquina (la configuración del formato fecha en Windows), Excel las tomaba como texto unas veces y como fecha en otras.

Sin aclarar estas dudas solicito formalmente se retire el cartelito de RESUELTO  :p :p :p :D

Saludos


Hola amigo Andrés, el asunto viene porque tuve un problema con campos blob de gran tamaño, si exceden de 255 caracteres no te muestra el contenido y en su lugar te muestra simplemente ésto '##################......###'.

Me percaté que si cambiaba manualmente la categoría de TEXTO a GENERAL si se muestra el contenido de forma correcta, pero el asunto es que tenía que hacerlo de forma automatizada. Después de algunas pruebas donde cHackAll me ayudó concluimos que no era necesario asignar la propiedad ExcelRange.NumberFormat (además de que enecumene me había comentado que en lugar de asignar '@' no le asignara nada).

Y es que si recordamos que es lo que hace Excel cuando "importas" un archivo de texto; las columnas te las asigna por omisión GENERAL y uno lo puede modificar a lo que corresponda. Vamos, que hasta un tanto lógico es el asunto :D :D :D.

Referente al formato de fecha y/o números, lo que yo hago es utilizar la propiedad DisplayFormat de campo para definir el formato que quiero mostrar y en el caso concreto de la fecha utilizo la función FormatDateTime para que el campo pase con la categoría correcta. Algo así:



delphi
  1. Valor := FormatDateTime(TDateTimeField(xlDataSet.Fields[i]).DisplayFormat, ValordelCampo);
  2. ......
  3. ExcelRange.Value2 := Valor;



Y si, la variable Valor es del tipo OLEVariant, la cual puede tomar cualquier tipo de dato y ésta pasa automáticamente a Excel

Salud OS
  • 0

#8 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 mensajes

Escrito 31 enero 2011 - 11:35

Gracias Egostar.

También yo en esa miniaplicación que te comentaba realizaba el traspaso utilizando DateTimeToString, lo cual es idéntico a usar FormatDateTime (en realidad FormatDateTime es una función que llama al procedimiento DateTimeToString pasándole el resultado, result, como parámetro por referencia), y tomando el formato de la configuración de Windows, en mi caso nada de DisplayFormat ya que esas fechas no las obtenía de un DataSet.

En realidad, y después de revisarlo de nuevo, aunque se formatee el valor correctamente (tomando la configuración de Windows), Excel no cambia el formato de la celda, sino que ésta mantiene el que tenía cuando se diseñó, lo cual también me parece lógico.

Lo que no conocía era el uso del comando NumberFormat, el cual me ha permitido hacer lo que quería, que es asegurarme de que aparte del valor pasado, Excel tome dicha celda como lo que es, una fecha, y no un texto con apariencia de fecha. Esto lo he logrado de esta forma:



delphi
  1. WSh.Cells[i, ColFecha].NumberFormat := 'dd/mm/aaaa';



No trabajo con rangos, así que omito lo de ExcelRange que traía tu ejemplo. Asignándole esa cadena, Excel me convierte el formato de la celda a Fecha con dicho formato. Lo curioso es que si le paso un formato en notación anglosajona, "dd/mm/yyyy", no lo acepta, lo toma como texto y me saca algo como esto en la celda: "22/04/yyyy", es de esas chapuzas incomprensibles de Microsoft en su afán de traducir hasta los comandos de sus aplicaciones, si mi programa corriera en una máquina con otro idioma fallaría  :@ :@ :@

Pero lo del NumberFormat sí funciona, aunque el valor que le asigno no he visto necesidad de declararlo como OLEVariant, me sirve como una cadena simple o como un literal (como en el ejemplo).

Saludos

  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 31 enero 2011 - 02:28

....... Excel me convierte el formato de la celda a Fecha con dicho formato. Lo curioso es que si le paso un formato en notación anglosajona, "dd/mm/yyyy", no lo acepta, lo toma como texto y me saca algo como esto en la celda: "22/04/yyyy", es de esas chapuzas incomprensibles de Microsoft en su afán de traducir hasta los comandos de sus aplicaciones, si mi programa corriera en una máquina con otro idioma fallaría  :@ :@ :@


Intenta asignando una variable LCID de esta forma:



delphi
  1.   fLCID := LOCALE_USER_DEFAULT;



La cual la pide la mayoría de las funciones de Excel.

Salud OS
  • 0

#10 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 mensajes

Escrito 01 febrero 2011 - 02:11

¿A qué objeto pertenece esa variable fLCID? ¿Al objeto Excel, al WorkBook, al WorkSheet? Me saltan errores  :( y tampoco la veo como variable global.

De todas formas me funciona bien así, indicando el formato en castellano, tampoco dispongo de un equipo en otro idioma para hacer la prueba, pero quise hacer notar las pegas que dan las traducciones de Excel, Access ... etc, no es la primera vez que me dan problemas, prefiero para estas cosas una notación universal en inglés.

Saludos
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 01 febrero 2011 - 02:17

¿A qué objeto pertenece esa variable fLCID? ¿Al objeto Excel, al WorkBook, al WorkSheet? Me saltan errores  :( y tampoco la veo como variable global.


LCID = Locale IDs Assigned by Microsoft

Creo que éste documento lo explica mejor de lo que yo podría.

http://www.desarroll...iculos/1189.php

Muchas de las funciones de automatización de Office la utilizan.

Salud OS
  • 0

#12 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 mensajes

Escrito 01 febrero 2011 - 02:19

Gracias, le echaré un vistazo  (y)
  • 0




IP.Board spam blocked by CleanTalk.