Ich verwendet Python3.9:
Ich öffne über "win32com" eine Verbindung zu Excel und fange einen Button-Doppelclick ab.
Die While-Schleife wird durch den Doppelclick beendet und das Script beendet.
Problem:
Danach ist das Excel-Fenster eingefroren und ich kann es nicht mehr verwenden.
Erst wenn ich in Spyder5 den IPython-Kernel neu starte, wird kann das Excel-Fenster wieder verwendet werden.
Es scheint als hält der IPython Kernel noch eine Verbindung zu Excel und friert dies ein.
Ist wohl ein Problem des IPython-Kernels, der ja in Spyder nicht geschlossen wird nachdem das Script am Ende ankommt.
Ich habe schon danach gesucht wie ich die "win32com" Verbindung vor dem Beenden auflöse - ohne Erfolg.
Hat jemand eine Idee wie man das löst , so dass Excel nicht einfriert ?
Code: Alles auswählen
import win32com.client as win32
import pythoncom
# use absolute pathes
WORKBOOK = "d:/LabTestPy/labPyCommon/test/test_excel_RegDict.xlsx"
WORKSHEET = "Sheet"
# the button event will open this class
class ButtonEvents:
# method executed on doubleclick to close while loop
def OnDblClick(self, *args):
print("button double clicked")
global keepOpen
keepOpen = False
#config win32com excel connection
xlApp = win32.gencache.EnsureDispatch('Excel.Application')
xlApp.Visible = True
xlWb = xlApp.Workbooks.Open(WORKBOOK)
xlWs = xlWb.Sheets(WORKSHEET)
# define button event callback class
xlButtonEvents=win32.WithEvents(xlWs.OLEObjects("CommandButton1").Object,ButtonEvents)
# a global variable to exit the while-loop
global keepOpen
keepOpen = True
# a while loop to wait until the button in excel is double-clicked
while keepOpen:
pythoncom.PumpWaitingMessages()
print("Script finished")