Otro hola a todos,Excel automatización: Primer caso faltante
estoy haciendo automatización de Excel a través de interoperabilidad en C#, y yo quiero ser informado cuando se cierra un libro. Sin embargo, no hay ningún evento Cerrar en el libro de trabajo ni un evento Salir en la aplicación.
¿Alguien ha hecho eso antes? ¿Cómo puedo escribir un fragmento de código que reacciona al libro de trabajo cerrado (que solo se ejecuta si el libro está realmente cerrado)? Idealmente, eso debería suceder después de cerrar el libro de trabajo, por lo que puedo confiar en el archivo para reflejar todos los cambios.
detalles acerca de lo que he encontrado hasta ahora:
hay un evento BeforeClose(), pero si hay cambios sin guardar se eleva este evento antes de que el usuario le pide si desea guardar ellos, por lo que en el momento en que pueda procesar el evento, no tengo el archivo final y no puedo liberar los objetos COM, las dos cosas que necesito tener/hacer. Ni siquiera sé si el libro de trabajo se cerrará realmente, ya que el usuario puede optar por cancelar el cierre.
Luego hay un evento BeforeSave(). Por lo tanto, si el usuario elige "Sí" para guardar los cambios no guardados, entonces BeforeSave() se ejecuta después de BeforeClose(). Sin embargo, si el usuario elige "Abortar", luego pulsa "archivo-> guardar", se ejecuta exactamente el mismo orden de eventos. Además, si el usuario elige "No", el BeforeSave() no se ejecuta en absoluto. Lo mismo es válido siempre que el usuario no haga clic en ninguna de estas opciones.
Hola Nelson: sí, ya lo he cubierto. El problema es que la parte "y BeforeSave() no es" parte de su propuesta es semidecidable. Si no se llama, puedo esperar pero nunca decidir si esto significa que abortó, eligió no, o simplemente no ha hecho clic en ningún botón todavía. – chiccodoro