Problemilla con EXCEL

Post Reply
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Problemilla con EXCEL

Post by manuramos »

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
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Problemilla con EXCEL

Post by Manuel Valdenebro »

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
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

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
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

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
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

OK lo pruebo y te cuento. Gracias
Nos Gusta Programar
Fernando Morales
Posts: 17
Joined: Mon Oct 31, 2005 6:16 pm

Consulta.

Post by Fernando Morales »

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
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

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
Post Reply