8

win32comを使用してCOMサービスと対話するスクリプトがあります。プログラムがすでに開いている場合は、意図したとおりに機能します。win32com.client.dynamic.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アプリケーションオブジェクトの新しいインスタンスを開くためのもう1つの便利な関数です。

于 2013-10-15T20:19:18.803 に答える