2017-06-09 83 views
0

在python 3.6中,我使用COM接口與Excel和Word進行通信,在這種情況下Word用於自動報告,因爲數據處理是在python中完成的。python獲取COM ole對象的成員

我不知道python如何獲得類似於使用dir()函數的COM對象的成員。 (以前用Matlab,我會使用.get.invoke方法可以解決)

因此,代碼是:

def wordOpen(wordfile): 
    pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)  
    wApp = win32com.client.DispatchEx('Word.Application') 
    wDoc = wApp.Documents.Open(wordfile) 
    wApp.Visible = 1 
    wApp.Activate 
    wRange = wDoc.Content 
    return wApp, wDoc, wRange 

wApp, wDoc, wRange = wordOpen(wordfile) 

dir(wDoc) 

..不提供我的方法和屬性列表Word文檔對象(類似於wApp和wRange)。

同樣我試過inspect.getmembers(wDoc)但這也不提供我正在尋找的方法/屬性的列表。

對於與Excel通信的同樣的事情,我曾經進入VBA編輯器並在那裏得到一個列表,但是有沒有任何方法可以直接從IPython 控制檯執行此操作?

回答

0

做了一些更多的搜索,並找出它自己。上面的例子使用'dynamic dispatch',我們想用'static dispatch'來代替。這不會改變代碼,它只需要一次性的操作。

Dynamic是一種創建這些對象的快捷方式,然後python對對象的類型一無所知。 靜態意味着您必須從命令行運行makepy.py來創建類型庫(在本例中爲Word對象),並且在完成一次後,python會在每次下次啓動COM時知道有關該對象的所有信息目的。

該過程非常簡單,並且與向項目添加引用的VBA操作相當。