摘自:PyWin32.chm

Introduction

This documents how to quickly start using COM from Python. It is not a thorough discussion of the COM system, or of the concepts introduced by COM.

Other good information on COM can be found in various conference tutorials - please see the collection of Mark's conference tutorials

For information on implementing COM objects using Python, please see a Quick Start to Server side COM and Python

In this document we discuss the following topics:

Quick Start

To use a COM object from Python

import win32com.client
o =
win32com.client.Dispatch("Object.Name")
o.Method()
o.property = "New
Value"
print o.property

Example

o = win32com.client.Dispatch("Excel.Application")
o.Visible = 1
o.Workbooks.Add() #
for office 97 – 95 a bit different!
o.Cells(1,1).Value = "Hello"

And we will see the word "Hello" appear in the top cell.

How do I know which methods and properties are
available?

Good question. This is hard! You need to use the documentation with the
products, or possibly a COM browser. Note however that COM browsers typically
rely on these objects registering themselves in certain ways, and many objects
to not do this. You are just expected to know.

The Python COM browser

PythonCOM comes with a basic COM browser that may show you the information
you need. Note that this package requires Pythonwin (ie, the MFC GUI
environment) to be installed for this to work.

There are far better COM browsers available - I tend to use the one that
comes with MSVC, or this one!

To run the browser, simply select it from the Pythonwin Tools menu, or
double-click on the file win32com\client\combrowse.py

Static Dispatch (or Type Safe) objects

In the above examples, if we printed the 'repr(o)' object above,
it would have resulted in

<COMObject Excel.Application>

This reflects that the object is a generic COM object that Python has no
special knowledge of (other than the name you used to create it!). This is known
as a "dynamic dispatch" object, as all knowledge is built dynamically. The
win32com package also has the concept of static dispatch objects, which
gives Python up-front knowledge about the objects that it is working with
(including arguments, argument types, etc)

In a nutshell, Static Dispatch involves the generation of a .py file that
contains support for the specific object. For more overview information, please
see the documentation references above.

The generation and management of the .py files is somewhat automatic, and
involves one of 2 steps:

  • Using makepy.py to select a COM library. This process is very similar
    to Visual Basic, where you select from a list of all objects installed on your
    system, and once selected the objects are magically useable.

or

  • Use explicit code to check for, and possibly generate, support at run-time.
    This is very powerful, as it allows the developer to avoid ensuring the user has
    selected the appropriate type library. This option is extremely powerful for OCX
    users, as it allows Python code to sub-class an OCX control, but the actual
    sub-class can be generated at run-time. Use makepy.py with a -i
    option to see how to include this support in your Python code.

The win32com.client.gencache module manages these generated files.
This module has some documentation of its
own
, but you probably don't need to know the gory details!

How do I get at the generated module?

You will notice that the generated file name is long and cryptic - obviously
not designed for humans to work with! So how do you get at the module object for
the generated code?

Hopefully, the answer is you shouldn't need to. All generated file
support is generally available directly via win32com.client.Dispatch and
win32com.client.constants. But should you ever really need the Python
module object, the win32com.client.gencache module has functions specifically
for this. The functions GetModuleForCLSID and GetModuleForProgID both return
Python module objects that you can use in your code. See the docstrings in the
gencache code for more details.

To generate Python Sources supporting a COM object

Example using Microsoft Office 97.

Either:

  • Run 'win32com\client\makepy.py' (eg, run it from the command
    window, or double-click on it) and a list will be presented. Select the Type
    Library 'Microsoft Word 8.0 Object Library'
  • From a command prompt, run the command 'makepy.py "Microsoft Word 8.0
    Object Library"
    ' (include the double quotes). This simply avoids the
    selection process.
  • If you desire, you can also use explicit code to generate it just before you
    need to use it at runtime. Run 'makepy.py -i "Microsoft Word 8.0 Object
    Library"
    ' (include the double quotes) to see how to do this.

And that is it! Nothing more needed. No special import statements needed!
Now, you simply need say

>>> import win32com.client

>>> w=win32com.client.Dispatch("Word.Application")

>>> w.Visible=1

>>> w

<win32com.gen_py.Microsoft Word 8.0 Object
Library._Application>

Note that now Python knows the explicit type of the object.

Using COM Constants

Makepy automatically installs all generated constants from a type library in
an object called win32com.clients.constants. You do not need to do
anything special to make these constants work, other than create the object
itself (ie, in the example above, the constants relating to Word would
automatically be available after the
w=win32com.client.Dispatch("Word.Application")
statement.

For example, immediately after executing the code above, you could execute
the following:

>>> w.WindowState =
win32com.client.constants.wdWindowStateMinimize

and Word will Minimize.

最新文章

  1. POJ 2253 Frogger(Dijkstra)
  2. eclipse软件创建servlet
  3. Linux x64 下 Matlab R2013a 300 kb 脚本文件调试的 CPU 占用过高问题的解决办法
  4. 命令模式(Command Pattern)
  5. Redis处理文件日志并发(2)
  6. C#使用Dotfuscator混淆代码以及加密
  7. UIAlertController弹出提示框
  8. spring 官方下载地址
  9. 加密算法 - RSA算法一
  10. Java多线程初学者指南(8):从线程返回数据的两种方法
  11. yarn安装
  12. 使用Python启动一个简单的服务器
  13. Verification of Model Transformations A Survey of the State-of-the-Art 模型转换的验证 对现状的调查
  14. Luogu P4587 [FJOI2016]神秘数
  15. root用户登录mysql后新建用户提示1045错误
  16. POJ3694(KB9-D 割边+LCA)
  17. Android如何实现点击一次返回键返回桌面而不是退出应用
  18. WCF推送
  19. 从线性回归到CNN【转】
  20. leetCode题解之Self Dividing Numbers

热门文章

  1. JavaScript数据结构与算法(二) 队列的实现
  2. python3全栈开发-socket编程
  3. 对于IO流的个人理解
  4. [HEOI 2014]大工程
  5. [CQOI 2015]选数
  6. [AHOI 2005]COMMON 约数研究
  7. hzoj 2301(莫比乌斯反演)
  8. hdu3966 点权模板-树链部分
  9. Delphi备忘录——基本语句
  10. 开源小工具 - swagger API访问代码生成器(js/typescript)