win32com调度不会find已打开的应用程序实例

我正在使用python来parsingExcel文件,并在重新开始时使用excel = Dispatch('Excel.Application')访问应用程序的COM代码将find应用程序对象就好了,我将能够访问活动工作簿。

问题来了,当我有两个Excel的实例打开,我closures了第一个。 从那时起,每次调用excel = Dispatch('Excel.Application')提供一个与Excel打开的实例不同的应用程序对象。 如果我尝试excel.Visible=1它会打开一个新的Excel实例,而不是显示已经打开的excel实例。 如何获得已经打开的Excel实例的COM对象,而不是创build新的实例?

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

没有注册队列,所以当你的第一个实例死亡,第二个未注册,所以任何调用Excel.Application将启动第三个实例,他们将继续使用它,直到它也死了。

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

如果你需要重用一个实例,你必须保留一个指针。

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