2013-03-01 31 views
6

Mam skrypt, w którym używam win32com do interakcji z usługą COM. Działa zgodnie z przeznaczeniem, gdy program jest już otwarty. Łączę się z nią za pomocą metody win32com.client.dynamic.Dispatch, a następnie wchodzę w interakcję z dokumentem, który powinien już być otwarty. Zakładając, że program jest już otwarty, mogę łatwo sprawdzić, czy dokument jest otwarty, ale nie jestem pewien, jak sprawdzić, czy program jest już otwarty, czy nie. Kiedy używam wspomnianej wysyłki, to po prostu uruchamia program, jeśli nie jest już otwarty, co nie jest tym, czego chcę.Python/win32com - Sprawdź, czy program jest otwarty

Odpowiedz

10

wypróbuj metodę win32com.client.GetActiveObject(). To co mogę używać w niektórych funkcji convenience mam napisane, to jedno za 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 jest kolejnym udogodnieniem dla funkcji otwierania nowych instancji obiektu aplikacji Excel.