Impossible de fermer complètement Excel en utilisant win32com sur Python

C'est mon code, et j'ai trouvé beaucoup de réponses pour VBA.NET framework et est assez étrange. Lorsque j'exécute ce, Excel se ferme.

from win32com.client import DispatchEx
excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wbs.Close()
excel.Quit()
wbs = None
excel = None # <-- Excel Closes here

Mais quand je fais la suite, il ne se ferme pas.

excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wb = wbs.Open('D:\\Xaguar\\A1.xlsm')
wb.Close(False)
wbs.Close()
excel.Quit()
wb = None
wbs = None
excel = None  # <-- NOT Closing !!!

J'ai trouvé quelques réponses possibles à Débordement de Pile question Excel processus reste ouvert après l'interopérabilité; méthode traditionnelle ne fonctionne pas. Le problème est que n'est pas le Python, et je ne trouve pas Marshal.ReleaseComObject et GC. J'ai regardé sur toutes les démos sur ...site-packages/win32com et autres.

Même ça ne me dérange pas si je peux obtenir le PID et le tuer.

J'ai trouvé une solution de contournement dans Tuer les processus en se basant sur le nom de la fenêtre (win32).

Peut-être pas de la bonne façon, mais contourner est:

def close_excel_by_force(excel):
    import win32process
    import win32gui
    import win32api
    import win32con

    # Get the window's process id's
    hwnd = excel.Hwnd
    t, p = win32process.GetWindowThreadProcessId(hwnd)
    # Ask window nicely to close
    win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
    # Allow some time for app to close
    time.sleep(10)
    # If the application didn't close, force close
    try:
        handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, p)
        if handle:
            win32api.TerminateProcess(handle, 0)
            win32api.CloseHandle(handle)
    except:
        pass

excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wb = wbs.Open('D:\\Xaguar\\A1.xlsm')
wb.Close(False)
wbs.Close()
excel.Quit()
wb = None
wbs = None
close_excel_by_force(excel) # <--- YOU #@#$# DIEEEEE!! DIEEEE!!!

source d'informationauteur sacabuche