8

我有一个脚本,我使用 win32com 与 COM 服务进行交互。当程序已经打开时,它会按预期工作。我使用 win32com.client.dynamic.Dispatch 连接到它,然后与应该已经打开的文档进行交互。假设程序已经打开,我可以轻松检查文档是否打开,但我不确定如何检查程序是否已经打开。当我使用提到的 Dispatch 时,如果程序尚未打开,它只会启动程序,这不是我想要的。

4

1 回答 1

20

试试 win32com.client.GetActiveObject() 方法。这是我在编写的一些便利函数中使用的,这是一个用于 Excel 的函数:

def Excel(visible=True):
    '''Get running Excel instance if possible, else 
    return new instance. 
    '''
    try: 
        excel = win32com.client.GetActiveObject("Excel.Application")
        print("Running Excel instance found, returning object")

    except:
        excel = new_Excel(visible=visible)
        print("No running Excel instances, returning new instance")

    else:
        if not excel.Workbooks.Count:
            excel.Workbooks.Add(1)
        excel.Visible = visible

    return excel

new_Excel 只是打开 Excel 应用程序对象的新实例的另一个便利函数。

于 2013-10-15T20:19:18.803 回答