This is my code, and I found many answers for VBA, .NET framework and is pretty strange. When I execute this, Excel closes.
from win32com.client import DispatchEx excel = DispatchEx('Excel.Application') wbs = excel.Workbooks wbs.Close() excel.Quit() wbs = None excel = None # <-- Excel Closes here   But when I do the following, it does not close.
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 !!!   I found some possible answer in Stack Overflow question Excel process remains open after interop; traditional method not working. The problem is that is not Python, and I don't find Marshal.ReleaseComObject and GC. I looked over all the demos on ...site-packages/win32com and others.
Even it does not bother me if I can just get the PID and kill it.
I found a workaround in Kill process based on window name (win32).
May be not the proper way, but a workround is:
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!!! 
                Closing a file in Python Python has a close() method to close a file. The close() method can be called more than once and if any operation is performed on a closed file it raises a ValueError.
There are several APIs available to convert text to speech in python. One of such APIs available in the python library commonly known as win32com library. It provides a bunch of methods to get excited about and one of them is the Dispatch method of the library. Dispatch method when passed with the argument of SAPI.
Try this:
wbs.Close() excel.Quit() del excel # this line removed it from task manager in my case 
                        What worked for me was making sure to de-reference any variables that you assigned along the way like so:
import win32com.client as win32  fileDirectory = 'Hello World.xlsx'  #excelFile = win32.Dispatch('Excel.Application') excelFile = win32.gencache.EnsureDispatch('Excel.Application')  excelFile.Visible = True excelFile.DisplayAlerts = True  wb = excelFile.Workbooks.Open(fileDirectory) ws = wb.Sheets("Sell")  ws.Range("D1").Value = "Hello World!" ws = None  wb.Close(False) wb = None  excelFile.Quit() excelFile = None  It worked with either Dispatch format.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With