Problemilla con EXCEL

Problemilla con EXCEL

Postby manuramos » Mon Jul 10, 2006 6:22 pm

Resulta que tengo una hoja Excell con comodines que sustituyo, con mi aplicación, por los valores de la Base de Datos. Después le presento al usario los resultados (la Hopja Exel) en pantalla para que compruebe que están correctos y para que añada lo que le apetezca. Previamente he guardado la Hoja con un nombre determinado, para que cuando el usuario le de al icono guardar no se cepille la plantilla inicial.
Tengo otra cosa parecida con Word que funciona sin problemas. Todo perfecto salvo en un detalle que no consigo resolver.
Cuando ya existe el fichero Excel previamente guardado, me falla el "SaveAs" del Excel. Sin embargo en Word va perfecto. (No me gustaría tener que borrar el fichero anterior a cada vez)

¿Alguna idea?

Ahí va parte del código:

oExcel := TOleAuto():New("Excel.Application")
oExcel:WorkBooks:Open(cOrig)
oBook := oWord:Get("ActiveWorkBook")
oSheet := oWord:Get("ActiveSheet")
oText := oSheet:Range("A1:"+HazLetra(oSheet:UsedRange:Columns:Count())+LLENO(oSheet:UsedRange:Rows:Count()))
FOR nCont = 1 TO Len(aDat)
....
ALGORITMO DE SUSTITUCIOIN
...
NEXT
oText:Cells(1,1):Select()
oBook:SaveAs(cDoc) // SI YA EXISTE LA HOJA "cDoc", ENTONCES ESTE METODO NO FUNCIONA ¿POR QUE?
SysRefresh()
* // ----------------------------------------------------------------------------------
oWord:Visible := .T.
oWord:Set("WindowState",3) // MAXIMIZADO

Lógicamente aquí no puedo hacer oWord:End() sinó no se mantiene el EXCEL en pantalla. Lo hago más adelante.
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Re: Problemilla con EXCEL

Postby Manuel Valdenebro » Thu Jul 13, 2006 9:32 pm

Manu

Porque no utilizas:

oExcel:ActiveSheet:Copy()

oExcel:Visible = .T.

y el usuario trabaja con una copia de la plantilla. Si la quiere grabar o no lo decide cuando vaya a cerrar la hoja.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby manuramos » Fri Jul 14, 2006 6:08 pm

Buena idea, lo probaré.

Supongo que habrá que ponerlo entre
oBook := oWord:Get("ActiveWorkBook")
y
oSheet := oWord:Get("ActiveSheet")
Es que soy novato con excel.

De todas formas, me gustaría que la hoja (factrura) se guardara, para que sea más automático y por si al cliente se le olvida.
Lo curioso es que con Word no pasa.

Gracias
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby Manuel Valdenebro » Fri Jul 14, 2006 8:54 pm

Manu,

FUNCTION MAIN()
LOCAL cOrigen := "c:\fwh\samples\manu.xls"
LOCAL oExcel := CREATEOBJECT( "Excel.Application" )
LOCAL oWorkBook := oExcel:WorkBooks:Open(cOrigen)

oExcel:ActiveSheet:Copy()

oExcel:Visible = .T.

RETURN NIL
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby manuramos » Fri Jul 14, 2006 9:29 pm

Gracias Manuel. Es una buena solucion. La utilizaré.
Si no te importa, te voy a preguntar otra cosilla. ¿se puede cambiar el nombre al documento antes de modificarlo, ampliarlo, guardarlo, etc...?
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby Manuel Valdenebro » Sat Jul 15, 2006 4:39 am

Manu,

Comprueba el siguiente código. Ten cuidado que la línea 6 y 7 son
la misma, pero por el ancho de este correo aparecen como dos líneas distintas:

FUNCTION MAIN()
LOCAL cOrigen := "c:\fwh\samples\manu.xls"
LOCAL cDestino := "c:\fwh\samples\manu2.xls"
LOCAL oExcel := CREATEOBJECT( "Excel.Application" )
LOCAL oWorkBook := oExcel:WorkBooks:Open(cOrigen)

oExcel:ActiveSheet:Copy( oExcel:ActiveWorkbook:Sheets [oExcel:ActiveWorkbook:Sheets:Count ] ) //misma linea anterior
oExcel:DisplayAlerts= .F. // quita ventana confirmación
oExcel:ActiveSheet:SAVEAS(cDestino)
oExcel:DisplayAlerts= .T. // pone ventana confirmación

oExcel:Visible = .T.

RETURN NIL
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby manuramos » Sat Jul 15, 2006 8:39 pm

OK lo pruebo y te cuento. Gracias
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Consulta.

Postby Fernando Morales » Thu Jul 20, 2006 11:51 am

Hola,

¿Dónde puedo ver un listado de todas las acciones que puedo enviar a la hoja de cálculo (ej: oExcel:ActiveSheet:SAVEAS(cDestino)
oExcel:DisplayAlerts= .T. confirmación,
etc.)
Hasta ahora, lo único que hago es, con Ole2, abrir/crear la hoja de cálculo y hacer un volcado de todo lo que tengo en el browse, ajustar las celdas y poco más). Me gustaría saber, por ejemplo, como puedo activar filtro para una o todas las columnas, configurar la página, poner títulos, etc.).

Gracias por adelantado y un saludo,
Fernando Morales del Rosario
Fernando Morales
 
Posts: 17
Joined: Mon Oct 31, 2005 6:16 pm

Postby manuramos » Thu Jul 20, 2006 8:05 pm

Bueno, Fernando, no soy yo el más indicado para explicarte eso, pues llevo tan sólo algunas semanas con el traspaso de datos a Excel y World. Pero si entras en cualquiera de ellos, vete a la opcion "herramientas" del menu, subopcion "Macro", y pincha en "Editor de Visual Basic".
Una vez en el Editor, pincha sobre el icono "Examinador de Objetos". Verás que te sale un listado de todos los objetos/clases que puedes emplear, con sus métodos y datos internos.
Después es cuetion de, como yo hice, buscar ejemplos en este foro y probar con algunas clases hasta dar con lo que está buscando. Ya te darás cuenta que excel es algo más complicado de entender que Word, pero una vez medio lo pillas se aclaran muchas cosas.

Animo, suerte y ... ¡A POR ELLOS! (que aqui a lo mejor te funciona).
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 23 guests