[python-win32] How to correctly handle events using win32com ?
Gauthier ABRIAL
g_abrial at hotmail.com
Fri Nov 29 12:17:12 EST 2024
Hello,
I'm looking for some advice on how to correctly handle events using win32com. If I take the example of a very simple Excel automation, I tested two things.
*
Code1 below use pythoncom.PumpMessages() but I don't know how to stop it when the Excel is closing. I guess I should send a WM_QUIT message but I don't know how.
*
Code2 below use a while loop on pythoncom.PumpWaitingMessages() but once I stop the loop the COM server freeze as it is waiting for the messages it sends to be processed before closing. I guess I should pump all the remaining messages but I don't know how.
Maybe I should use a totally different approach.
Thanks a lot for your help.
G.
-------------------- Code1 Starts -----------------------
import win32com.client as win32
import pythoncom
#The event handlers
class wbEvents:
def OnBeforeClose(self, Cancel):
print('Closing Workbook')
# Send WM_QUIT here ?
xlApp = win32.Dispatch("Excel.Application") #Open Excel
xlApp.Visible=True #Make Excel Visible
xlwb = xlApp.Workbooks.Add() #Create a workbook
ws=xlwb.Sheets("Sheet1") #Get the first worksheet
xl_events=win32.WithEvents(xlwb,wbEvents) #Add and Event handler
pythoncom.PumpMessages()
-------------------- Code1 Ends -----------------------
-------------------- Code2 Starts -----------------------
import win32com.client as win32
import pythoncom
import time
#The event handlers
class wbEvents:
def OnBeforeClose(self, Cancel):
print('Closing Workbook')
global keepOpen
keepOpen = False
xlApp = win32.Dispatch("Excel.Application") #Open Excel
xlApp.Visible=True #Make Excel Visible
xlwb = xlApp.Workbooks.Add() #Create a workbook
ws=xlwb.Sheets("Sheet1") #Get the first worksheet
xl_events=win32.WithEvents(xlwb,wbEvents) #Add and Event handler
# define initalizer
keepOpen = True
while keepOpen:
time.sleep(0.1)
pythoncom.PumpWaitingMessages()
-------------------- Code2 Ends -----------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/python-win32/attachments/20241129/0a279d6a/attachment.html>
More information about the python-win32
mailing list