Página 1 de 1

¿Cerrar excel sin acabar el script?

Publicado: 14 Abr 2016, 17:06
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")

Re: ¿Cerrar excel sin acabar el script?

Publicado: 16 Abr 2016, 09:04
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.

Re: ¿Cerrar excel sin acabar el script?

Publicado: 16 Abr 2016, 09:50
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.

Re: ¿Cerrar excel sin acabar el script?

Publicado: 17 Abr 2016, 00:11
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!