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.
Problemilla con EXCEL
Problemilla con EXCEL
Nos Gusta Programar
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
Re: Problemilla con EXCEL
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.
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
Manuel
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
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
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
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
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
Manuel
-
- Posts: 17
- Joined: Mon Oct 31, 2005 6:16 pm
Consulta.
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
¿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
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).
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