python使用win32com的心得
https://my.oschina.net/zxcholmes/blog/484789
摘要: 學會如何獲取操作windows其它com方法,不依賴網上有限的com操作教程。
主要是有個項目可能要用到ppt轉換成視頻的功能。 之后在想使用com操作excel還有word,ppt的時候,相信大部分人跟我一樣,都是搜索python如何操作ppt,或者win32com操作office之類的搜索語句, 搜索完畢之后,點進去之后,幾乎都直接是代碼了,我覺得這樣看得我雲里霧里的,如果想做些其它操作都做不到,我當時的想法是想知道這些com的操作,究竟在哪里可以查找的到,因為網上只是有限的幾個操作,注入往ppt添加圖片,或者doc轉成pdf之類的,而實際上的office的com操作時不止這些函數的,那么我們怎么知道其它的api呢?這樣子我們就可以脫離網上的代碼,自己編寫com代碼了。
一番查找,谷歌之后,在一個網頁上終於找到了答案:
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.
我就是安裝的時候點的太快,結果忘記了路徑,重新點擊安裝,記下了路徑。
現在操作ppt的方法我們弄明白了,那么操作word,excel也是一樣的道理。順便封裝了一個comppt.py的操作,由於剛寫python,代碼不是很溜:
__author__ = 'zxc' import win32com.client import time import os ppSaveAsWMV = 37 # only for windows platform and with the microsoft office 2010 or above,it needs the library win32com def 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() pass if __name__ == '__main__': cover_ppt_to_wmv('d:\\python\\demo.ppt','d:\\python\\demo.wmv')
