La actualización de Excel con pywin32 está fallando debido a una ventana emergente.
Tengo un script de Python que actualiza archivos de Excel cada 15 minutos. Esos archivos están conectados a Analysis Services, por lo que simplemente hacer clic en “Actualizar todo” puede hacer la actualización. Para automatizar eso en Python, estoy usando la biblioteca pywin32.
import win32com.client
xlapp = win32com.client.gencache.EnsureDispatch("Excel.Application")
wb_7 = xlapp.Workbooks.Open(excel_str_path)
wb_7.RefreshAll()
xlapp.CalculateUntilAsyncQueriesDone()
wb_7.Save()
wb_7.Close(True)
Sin embargo, de vez en cuando me encuentro con el problema de la aparición de un mensaje emergente del servicio de análisis. Algo como esto:
aquí
Entonces, cuando aparece este mensaje emergente, el script de Python espera hasta que se complete la actualización, lo cual nunca sucede. Como resultado, el script queda inactivo y no realiza ninguna acción hasta que se cierre manualmente esta ventana emergente.
¿Cuál es la mejor manera de manejar esto?
davy.ai
La mejor manera de manejar el pop-up de Analysis Services al refrescar archivos de Excel a través de un script de Python usando la biblioteca pywin32 es añadiendo manejo de errores en el código. Específicamente, el script debe usar el método OnTime para programarse a sí mismo para ejecutarse 15 minutos después de que se espera que el pop-up se cierre. Esto permitirá que el script siga ejecutándose sin quedar bloqueado en el pop-up, y asegurará que los archivos de Excel se refresquen consistentemente cada 15 minutos.
Aquí hay un ejemplo de cómo añadir manejo de errores al código:
Este código utiliza un bloque try/except para manejar errores que puedan ocurrir al refrescar los archivos de Excel. Si se detecta un pop-up de Analysis Services, el bloque except imprime un mensaje y espera 15 minutos antes de reagendar el script para que se ejecute nuevamente usando el método OnTime. El método OnTime toma dos argumentos: el tiempo en el que el código debe ser ejecutado (en este caso, el tiempo actual más 15 minutos) y el nombre de la función a ejecutar (en este caso, la función refresh_excel).
Al agregar manejo de errores al código de esta manera, el script de Python será capaz de manejar el pop-up de Analysis Services y continuar ejecutándose sin interrupciones.