使用Python和win32com访问Excel COM中的枚举常量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python和win32com访问Excel COM中的枚举常量相关的知识,希望对你有一定的参考价值。

我正在使用python 2.7 win32com模块从Python加载MS Excel工作表:

    book = xlApp.Workbooks.Open("myFile.xls")
    sheet = book.Sheets(1)

Range,Worksheet等的许多方法和属性都使用XlDirection,XlFillWith等枚举。这些定义了常量,例如xlDown,xlUp,xlFillWithContents等。这些常量可以从win32com获得,以便我可以做,例如:

    column = outputsSheet.Range("I5:I150")
    lastRow = column.End(xlInterop.xlDown)
    print "Last row:", lastRow.Row

这不起作用,因为没有定义xlInterop,有没有办法使用win32com访问它?通过反复试验发现xlDown等常量的值是不太实际的。

答案

我是win32com的新手,所以我不知道这是否有帮助...尝试启动Excel:

xlApp = win32com.client.gencache.EnsureDispatch("Excel.Application")

这应该运行makepy,你可以在... Lib site-packages win32com gen_py 00020813-0000-0000-C000-000000000046x0x1x7中找到一些生成的Python文件(最后一个文件夹可能是你的另一个名字,我不知道)。检查init.py文件,那里定义了一堆常量。

编辑:您可以使用以下命令访问这些常量:

from win32com.client import constants as c

Edit2:文件夹的路径:

win32com.__gen_path__

另一答案

Olav的回答使我能够搜索关键词“win32com gencache EnsureDispatch常量”,并找到了一些有用的链接。像How do I import a COM object namespace/enumeration in Python?,我的问题重复。这指向一个ActiveState页面Quick Start to Client side COM and Python介绍这个东西。奇怪的是,该页面声明client.Dispatch应该足以获得constnats,但我发现它不是,我必须运行gencache.EnsureDispatch,然后才会出现常量:

Portable Python >>> from win32com import client as com
Portable Python >>> from win32com.client import constants as c
Portable Python >>> word = com.Dispatch('Word.Application')
Portable Python >>> c.wdWindowStateMinimize
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "F:PORTAB~1.1Applibsite-packageswin32comclient\__init__.py", line 170, in __getattr__
      raise AttributeError(a)
  AttributeError: wdWindowStateMinimize
Portable Python >>> word = com.gencache.EnsureDispatch("Word.Application")
Portable Python >>> c.wdWindowStateMinimize
2

以上是关于使用Python和win32com访问Excel COM中的枚举常量的主要内容,如果未能解决你的问题,请参考以下文章

如何强制python(使用win32com)创建一个新的excel实例?

Python文本数据互相转换(pandas and win32com)

Python 基于win32com客户端实现Excel操作

Python - Win32Com - 如何从 Excel 电子表格单元格中提取超链接?

Python如何利用win32com模块,在指定位置新建Excel?

python win32com 读取带密码的excel