python使用win32com的心得

來源:互聯網
上載者:User

標籤:

        python可以使用一個第三方庫叫做win32com達到操作com的目的,我是安裝了ActivePython的第三方庫,從官網下載了安裝包,該第三方庫幾乎封裝了所有python下面的win32相關的操作,例如win32api,win32gui等等,可以說是比較齊全的了,可以自行百度擷取。
        主要是有個項目可能要用到ppt轉換成視頻的功能。之後在想使用com操作excel還有word,ppt的時候,相信大部分人跟我一樣,都是搜尋python如何操作ppt,或者win32com操作office之類的搜尋語句,搜尋完畢之後,點進去之後,幾乎都直接是代碼了,我覺得這樣看得我雲裡霧裡的,如果想做些其它操作都做不到,我當時的想法是想知道這些com的操作,究竟在哪裡可以尋找的到,因為網上只是有限的幾個操作,注入往ppt添加圖片,或者doc轉成pdf之類的,而實際上的office的com操作時不止這些函數的,那麼我們怎麼知道其它的api呢?這樣子我們就可以脫離網上的代碼,自己編寫com代碼了。
        一番尋找,Google之後,在一個網頁上終於找到了答案:
Querying Interfaces

Now, how does one investigate the detail of each object? For example, how does one access the name of a folder? Firstly, it helps to know the interface that the object exposes, and this information can be found in several places:

  • The Microsoft API documentation.
  • Other useful sources, such as the "Outlook Exchange" documentation.
  • The interface file generated by the "COM Makepy utility". To know which file is relevant to the interface in question, either perform a "grep" search for the name of the interface on the win32com/gen_py directory within your Python distribution, or invoke an erroneous method or access a non-existent attribute on an object with that interface in order to see what the name of the interface file is.
  • The "OLE/COM Object Viewer" in the "Tools" menu in Microsoft Visual C++ (at least in Visual Studio 6.0).
    • Once opened, the "Interfaces" section of the information hierarchy can be explored to reveal some "_Application" entries. For one of these, the information pane will mention "Microsoft Outlook 9.0 Object Library" under "TypeLib", for example.
    • Double-clicking on an "_Application" entry will provide an "ITypeInfo Viewer" which contains a "_Methods" section describing the available methods on the application‘s automation object.
    • The "Type Libraries" section of the information hierarchy will list, for example, "Microsoft Outlook 9.0 Object Library", and this can be investigated by double-clicking on that entry.

Hopefully, however, the object that you are accessing is known well enough by PythonWin to permit some kind of attribute or method completion on it. You should only need to resort to the above when more detailed knowledge about a method or attribute is required. You can also try something like this:

dir(object.__class__)

The name of a folder can be accessed as follows:

object.Name # Where object refers to a folder.
        這裡的第四個方法就是我找到的確認有效,其它三個如果有興趣的可以試試,第四個方法那就是ole/com object viewer工具,百度之下,下載了一個這樣的工具,據說安裝了vs之後是有的, 不過由於我不知道可執行程式的名字,也無從找起,於是重新下載了一個完整的工具,安裝之後 預設安裝路徑是:C:\Program Files (x86)\Resource Kit

        我就是安裝的時候點的太快,結果忘記了路徑,重新點擊安裝,記下了路徑。

         這個工具名字叫做oleview.exe,開啟的時候,提示缺少了什麼dll,沒關係。       因為我現在知道名字了,然後使用everything搜尋了工具,在我的visual studio裡面同樣找到了該工具,這下子可以完美開啟了。     軟體的介面樣子大概是:

記得要在右側的

Type Libraries裡面找到相關的library,這裡我需要操作的是powerpoint,也就是ppt
找到之後,雙擊開啟它。     在右側的就是一個列表,左側的就是對於的內容,剛剛開啟的時候,左側顯示的是完整的PowerPoint的api。     由於這個工具,不能夠ctrl+f尋找,我們可以ctrl+a,複製左側的內容到文本中,使用其他諸如sublime文字編輯器執行尋找功能。     下面搜尋一下:saveAs(大概就是這個意思,我想找一個api可以另存新檔ppt為視頻的操作)


    我們找到了這個函數,同時結合網上的例子,我們就知道怎麼使用了,傳入的第一個參數是FileName,顧名思義就是檔案名稱,第二個是int類型的fileFormat,如果是網上的例子的話,多半隻會告訴你一個轉換成pdf的代碼,但是現在我要的是轉成視頻。     我們回到ole viewer,看看有沒有fileformat的資訊。 果不其然,發現了這樣的代碼:
    PpSaveAsFileType     雙擊它


    在最後,我找到了ppSaveAsWMV,很好,這樣子我們就可以結合網上的例子,修改了。

現在操作ppt的方法我們弄明白了,那麼操作word,excel也是一樣的道理。順便封裝了一個comppt.py的操作,由於剛寫python,代碼不是很溜:

__author__ = ‘zxc‘import win32com.clientimport timeimport osppSaveAsWMV = 37# only for windows platform and with the microsoft office 2010 or above,it needs the library win32comdef cover_ppt_to_wmv(ppt_src,wmv_target):    ppt = win32com.client.Dispatch(‘PowerPoint.Application‘)    presentation = ppt.Presentations.Open(ppt_src,WithWindow=False)    presentation.CreateVideo(wmv_target,-1,4,720,24,60)    start_time_stamp = time.time()    while True:        time.sleep(4)        try:            os.rename(wmv_target,wmv_target)            print ‘success‘            break        except Exception, e:            pass    end_time_stamp=time.time()    print end_time_stamp-start_time_stamp    ppt.Quit()    passif __name__ == ‘__main__‘:    cover_ppt_to_wmv(‘d:\\python\\demo.ppt‘,‘d:\\python\\demo.wmv‘)






python使用win32com的心得

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.