Clipper/FiveWin - pasar a Excel

 
Vista:

pasar a Excel

Publicado por marcelo (33 intervenciones) el 26/02/2009 22:26:19
estoy generando un archivo excel, uso FWH, BCC55 y xHARBOUR.
con la siguiente instruccion paso la fecha:

OleSetProperty( hSheet, "Cells", Fila, 1, Ventas->Fecha )

pero sale un numero y luego en el excel tengo que poner formato celda fecha y todo ok.

para evitar eso pongo
OleSetProperty( hSheet, "Cells", Fila, 1, dtoc(Ventas->Fecha) )

asi sale en excel con formato fecha, pero al reves.

Tengo set data brit y pone la fecha al reves, ej, si es 26-02-09 (la fecha de hoy), en el excel aparece 09-02-2026.

una solucion es separar day(), month() y year(), pero hay otra manera?

y ya que estoy con esta clase, hay dos ejemplos muy cortitos de excel en FWH, donde consigo el resto de las instrucciones?

Saludos
MArcelo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:pasar a Excel

Publicado por Gabirel Pascual (913 intervenciones) el 27/02/2009 03:46:38
Por partes.

En Excel las fechas son numeros, que se toman en cuenta a partir del dia 1 de enero del año 1900, asi pues un valor 1 corresponde a la fecha mencionada anteriormente el valor 2 es el dia 2 de enero de 1900 y asi sucesivamente, por esa regla de 3 el valor de 365 seria el 31 de diciembre de 1900 o un valor de 699 seria por ejemplo el 30 de noviembre de 1901.W

Asi pues un valor de 1 en una celda formateada como fecha te devolveria 01/01/1900.

La mejor forma de trabajar con Excel y xHarbour es utilizando un objeto TOleAuto, en vez de un CreateObject, la ventaja del TOleAuto es que puedes usar llamadas a objetos tal como lo hace Visual Basic, o Delphi para manipular Excel.

En tu caso, y para que no tengas que dividir la fecha en dias, mes y año, lo mas rapido es darle formato de fecha a toda la columna desde tu programa usando el Objeto Excel

oExcel := TOLEAUTO():NEW("Excel.application)
oExcel:WorkBooks:Add

oCol := oExcel:Columns("A:A"):Select
oCol:Selection:Numberformat := "dd/mm/yyyy"

Y listo, con esto formateas toda la columna A desde tu programa para que tenga formato de fecha, ahora puedes poner en esa columna tus fechas y te apareceran formateadas, como muestras en tu primer ejemplo.

Acuerdate que en Excel el formato de la fecha por default es "anglo" es decir mes - dia - año, no dia mes año, por eso no te pone la fecha correcta aun cuando la escribes como una cadena de caracteres. (segun el segundo ejemplo)

En cuanto a las instrucciones de manipulacion de Excel.... bueno, solo te puedo decir que son mas de 2.000 propiedades (si, leiste bien, mas de DOS MIL) la documentacion completa con ejemplos la encuentras en la ayuda de VISUAL BASIC FOR APPLICATIONS que se instala cuando instalas el Office, si no la instalaste porque tu no usas Visual Basic, entonces deberás instalarla para ver todas las propiedades del objeto Excel.

De todas formas aun con la documentación es tremendamente complicado encontrar alguna cosa en especifico que quieras hacer, para esto tienes el editor de macros de Excel.

Lo que yo hago es lo siguiente, creo una macro con Excel, la cual guardara todos los pulsos de tecla que yo vaya haciendo, cuando he terminado de hacer todo lo que queria con Excel, detengo la macro y abro el Editor de Visual Basic que viene integrado con Excel, ahi seleccion EJECUTAR MACRO, y me aparece una lista de todas las macros que tengo grabadas, selecciono la que recien creé, luego selecciono la opcion de "modificar" y me parece el codigo fuente de dicha macro, algo como esto:

objExcel.Visible = True
objExcel.Workbooks.Add

objExcel.Cells(1, 1).Value = "Name"
objExcel.Cells(1, 1).Font.Bold = TRUE
objExcel.Cells(1, 1).Interior.ColorIndex = 30
objExcel.Cells(1, 1).Font.ColorIndex = 2
objExcel.Cells(2, 1).Value = "Test value 1"
objExcel.Cells(3, 1).Value = "Test value 2"
objExcel.Cells(4, 1).Value = "Tets value 3"
objExcel.Cells(5, 1).Value = "Test value 4"

Set objRange = objExcel.Range("A1","A5")
objRange.Font.Size = 14

Set objRange = objExcel.Range("A2","A5")
objRange.Interior.ColorIndex = 36

Set objRange = objExcel.ActiveCell.EntireColumn
objRange.AutoFit()

Traducrilo a xHarbour es tan simple como cambiar los ".", por ":" y eliminar las instrucciones que no son reconocidads por xHarbour:

objExcel := ToleAuto():New("excel.application")

objExcel:Visible = True
objExcel:Workbooks.Add()

objExcel:Cells(1, 1):Value := "Name"
objExcel:Cells(1, 1):Font:Bold := TRUE
objExcel:Cells(1, 1):Interior:ColorIndex := 30
objExcel:Cells(1, 1):Font:ColorIndex := 2
objExcel:Cells(2, 1):.Value := "Test value 1"
objExcel:Cells(3, 1):Value := "Test value 2"
objExcel:Cells(4, 1):Value := "Tets value 3"
objExcel:Cells(5, 1):Value := "Test value 4"

objRange := objExcel.Range("A1","A5")
objRange:Font.Size := 14

objRange := objExcel:Range("A2","A5")
objRange:Interior.ColorIndex := 36

objRange := objExcel:ActiveCell:EntireColumn
objRange:AutoFit()

Facil y rapido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por marcelo (161 intervenciones) el 27/02/2009 17:31:37
gracias master!
para pasar a excel no son tantas las funciones que necesito, yo le paso los datos en filas y columnas, luego que el usuario le de color, tamaño de letra, bordes, etc.
pruebo las que me pasaste, y cualquier otra duda vuelvo a consultarte.
nuevamente gracias.
Marcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por Ramon Paredes (47 intervenciones) el 28/02/2009 03:23:16
Marcelo,

Y no te resultaria mas facil ya que trabajas con FWH usar la clase Filexls que es superfacil de uso y es potente para la transferencia de informacion a excel ?

Yo te sugeriria hacer algunas pruebas con ella, si necesitas ejemplos hazmelo saber y te los proporcion ahi esta mi email,

Saludos desde Managua, Nicaragua

Ramon Paredes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por marcelo (161 intervenciones) el 02/03/2009 15:34:00
si, la conozco y la usé siempre en FW, pero es de 16 bits, no corre con xHarbour.
Saludos.
Marcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por Ramon Paredes (47 intervenciones) el 03/03/2009 01:57:00
Marcelo,

En eso te equivocas yo uso FWH 8.02 + xHarbour 1.1.0 y uso la filexls sin ningun problema, a 32 bits

Saludos desde managua, Nicaragua,

Ramon Paredes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por MARCELO (161 intervenciones) el 03/03/2009 15:13:27
no dudo que te funcione, a mi me tira este error

============================================================
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_XLSFORMAT' referenced from
C:FWHLIBXLSTESTXLS1.OBJ
Error: Unresolved external '_HB_FUN_TFILEXLS' referenced from
C:FWHLIBXLSTESTXLS1.OBJ
Fin del proceso.
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
** error 2 ** deleting C:FWHLIBXLSXLS.exe
Ha habido ERRORES al intentar Generar la Aplicacion
============================================================

en este foro me dijeron que solo funciona en 16 bits.

y por eso uso la Tole, pero es lentisima, tarda muchisimo en generar el archivo excel, y la LIBXLS lo genera casi instantaneamente y en 16 bits!!!!

Tendremos la misma versión ?

podrias enviarme el archivo lib y ch de tu version a [email protected]

Saludos.
Marcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por Gabriel Pascual (913 intervenciones) el 03/03/2009 20:06:29
Tienes el codigo fuente de la libreria FileXLS disponible, basta con que agregues los 2 PRGs que vienen en el codigo fuente a tu proyecto y listo, estas funcionando a 32 bits.

Obvio, la LIB de 16 bits no funciona con xHarbour, pero si tienes el codigo fuente de la clase no tiene porque dar problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar a Excel

Publicado por marcelo (161 intervenciones) el 03/03/2009 20:57:33
es que no tengo los códigos fuentes, donde los puedo conseguir?
Gracias.
MArcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

si, si y si

Publicado por MARCELO (161 intervenciones) el 03/03/2009 21:09:03
estan en source...
gracias, funcionó.
Marcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

al final es no

Publicado por marcelo (161 intervenciones) el 03/03/2009 22:44:20
compilé el primer ejemplo y funcionó.
el Verce crea el exe que arma el excel, pero hay un error con XLSerror.prg, y luego mas errores cuando declara variables publicas.
funcionó solamente con la hoja excel con datos que son constantes.
MArcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:al final es no

Publicado por Ramon Paredes (47 intervenciones) el 07/03/2009 02:52:04
Marcelo,

a que correo te puedo enviar un ejemplo con listado y calculos con la clase filexls a 32 bits ?

Saludos desde Managua, Nicaragua,

Ramon Paredes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar