我如何强制python(使用win32com)创build一个新的Excel实例?

我正在自动化一些需要很长时间的Excel相关任务。

我创build一个Excel实例使用:

excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Add() 

然而,脚本开始运行后,如果我select打开的Excel工作簿(而不是一个Python正在工作),python脚本崩溃。 但是,如果我打开一个新的Excel工作簿并input东西,python脚本不受影响。

有没有一种特殊的方式可以调用excel来防止这种情况的发生? 还是其他解决scheme?

编辑:这似乎工作。

 excel = win32.DispatchEx('Excel.Application') 

你为什么不这样做?

 from win32com import client excel=client.Dispatch("Excel.Application") 

这里有一种方法来创build一个新的实例使用静态caching(这是更快,并提供了使用kwargs的能力):

 from win32com.client import gencache import pythoncom clsid = "Word.Application" clsid = pythoncom.CoCreateInstanceEx(clsid, None, pythoncom.CLSCTX_SERVER, None, (pythoncom.IID_IDispatch,))[0] if gencache.is_readonly: #fix for "freezed" app: py2exe.org/index.cgi/UsingEnsureDispatch gencache.is_readonly = False gencache.Rebuild() olApp = gencache.EnsureDispatch(clsid)