Python win32com调度赢得';找不到已打开的应用程序实例

Python win32com调度赢得';找不到已打开的应用程序实例,python,excel,com,win32com,Python,Excel,Com,Win32com,我正在使用python解析Excel文件,并正在使用Excel=Dispatch('Excel.application')访问应用程序COM。重新启动时,代码将发现应用程序对象很好,我将能够访问活动工作簿 当我打开两个Excel实例并关闭第一个实例时,就会出现问题。从那时起,每次调用excel=Dispatch('excel.Application')都会提供一个不同于打开的excel实例的应用程序对象。如果我尝试excel.Visible=1它将打开一个新的excel实例,而不是显示已打开的e

我正在使用python解析Excel文件,并正在使用
Excel=Dispatch('Excel.application')
访问应用程序COM。重新启动时,代码将发现应用程序对象很好,我将能够访问活动工作簿


当我打开两个Excel实例并关闭第一个实例时,就会出现问题。从那时起,每次调用
excel=Dispatch('excel.Application')
都会提供一个不同于打开的excel实例的应用程序对象。如果我尝试
excel.Visible=1
它将打开一个新的excel实例,而不是显示已打开的excel实例。如何获取已打开的Excel实例的COM对象,而不是创建新实例?

当应用程序注册自身时,只有第一个实例得到注册,直到它死亡,然后注册下一个要注册的实例

没有注册队列,因此当第一个实例死亡时,第二个实例保持未注册状态,因此对
Excel.Application
的任何调用都将启动第三个实例,他们将继续使用它,直到它也死亡

总之,在注册实例之间启动的实例永远不会注册

如果需要重用实例,则必须保留指向该实例的指针

也就是说,如果您获得一个打开的Excel文件的实例,您可能会获得一个指向未注册Excel实例的链接。例如,如果Excel 1(已注册)打开了工作簿1,而Excel 2(未注册)打开了工作簿2,如果您请求工作簿2,您将获得Excel 2的实例(例如,通过
workbook.Application