¿Cerrar excel sin acabar el script?

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
bader
Mensajes: 6
Registrado: 14 Abr 2016, 16:48

¿Cerrar excel sin acabar el script?

Mensaje por bader »

Hola a todos:
Tengo un problema. Tengo un script que tiene que abrir y cerrar una hoja de excel varias veces, pero a veces, de manera aleatoria, no me cierrra el proceso excel.exe, provocando un error al siguiente intento de abrir la hoja, y terminando el script.
En lugar entonces de usar _excel_close() y excel_bookClose() lo intento mandando atajos de teclado con el comando send ( send(!{F4}) ) y funciona genial, pero aunque cierra el excel, el proceso excel.exe continua corriendo hasta que no cierre el script.
Mi pregunta es cómo podría hacerlo para finalizar tambien el proceso excel.exe cuando cierre la hoja de excel sin tener que terminar el script, y sin usar processCose("excel.exe").
Muchas gracias de antemano. Pego un pequeño código que muestra lo que digo. Hasta que no acepto el MsgBox y se cierra el programa no se cierra excel.exe

#include <excel.au3>

$oappl= _Excel_Open()
$ruta= @ScriptDir & "\xlsx.xlsx"
$libro= _Excel_BookOpen($oappl, $ruta)
_Excel_RangeWrite($libro,"hoja1","algo")
Sleep(100)
Send ("^g")
Send ("!{F4}")
$oappl= ""
$libro= ""
MsgBox(0,"","Hasta que no se acaba el script no se cierra el proceso excel.exe, jarlll")
bader
Mensajes: 6
Registrado: 14 Abr 2016, 16:48

Re: ¿Cerrar excel sin acabar el script?

Mensaje por bader »

Ya he averiguado el por qué.
Aunque se cierre la hoja excel con Alt+F4, la instancia sigue abierta (por _excel_Open() )y por eso el proceso queda corriendo. Para cerrarla hay que añadir un _excel_Close() si o si.
Cosas de novatazo total, en fin. Sigamos aprendiendo... :smt001

Aún me queda la duda del porqué la instancia si se cierra al acabar el script pero bueno, supongo que ya lo averiguaré mas adelante.

Un saludo.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: ¿Cerrar excel sin acabar el script?

Mensaje por Chefito »

La mayoría de los lenguajes de programación liberan casi todo lo que hayas hecho en el programa. Entre esas cosas está la liberación del espacio utilizado en memoria por las variables. Cuando asignas un objeto a una variable, este objeto se libera y se limpia de la memoria al cerrarse el programa. Si por casualidad has instanciado este objeto varias veces y aunque lo intentes cerrar de manera correcta a través del script, puede que lo hayas instanciado en algún otro momento y quede enganchado. Por eso, al cerrar el programa y liberarse todo, puede que sea esta la razón por la que se cierra y antes no :smt017 .
Hay que intentar escribir el código lo más correctamente posible para que no te pasen cosas raras :smt002 .
Igualmente, no digo que no pueda ser un pequeño fallo del propio autoit, aunque eso sería raro. Pero cosas más raras he visto con este lenguaje :smt003 .

Te recomiendo que ante situaciones como este utilices y trates los posibles errores que te pueden lanzar las funciones con la macro @error o lo que te devuelvan las funciones.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
bader
Mensajes: 6
Registrado: 14 Abr 2016, 16:48

Re: ¿Cerrar excel sin acabar el script?

Mensaje por bader »

Oye pues muchas gracias por la explicación, te lo agradezco :)
Tomo nota de lo de @error. Son esas cosas que por desconocimiento por un punto de perrería no uso, pero que puede (o sin puede mas bien) que ayuden a encontrar @errores.
¡Gracias!
Responder