Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python和win32com访问Excel COM中的枚举常量_Excel_Python 2.7_Win32com - Fatal编程技术网

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

使用Python和win32com访问Excel COM中的枚举常量,excel,python-2.7,win32com,Excel,Python 2.7,Win32com,我正在使用python 2.7 win32com模块从python加载MS Excel工作表: book = xlApp.Workbooks.Open("myFile.xls") sheet = book.Sheets(1) 范围、工作表等的许多方法和属性使用诸如XlDirection、XlFillWith等枚举。这些定义常量,如xlDown、xlUp、xlFillWithContents等。这些常量可从win32com获得,因此我可以执行以下操作,例如: column

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

    book = xlApp.Workbooks.Open("myFile.xls")
    sheet = book.Sheets(1)
范围、工作表等的许多方法和属性使用诸如XlDirection、XlFillWith等枚举。这些定义常量,如xlDown、xlUp、xlFillWithContents等。这些常量可从win32com获得,因此我可以执行以下操作,例如:

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

这不起作用,因为没有定义xlInterop,有没有办法使用Win32 COM访问它?通过反复试验发现诸如xlDown之类的常数的值不是很实用

我是win32com新手,所以我不知道这是否有帮助。。。尝试以以下方式启动Excel:

xlApp = win32com.client.gencache.EnsureDispatch("Excel.Application")
这应该运行makepy,您可以在…\Lib\site packages\win32com\gen_py\00020813-0000-0000-C000-0000000000 46x0x1x7中找到一些生成的Python文件(最后一个文件夹可能是您的另一个名称,我不知道)。检查init.py文件,其中定义了一组常量

编辑:您可以通过以下方式访问这些常量:

from win32com.client import constants as c
Edit2:文件夹的路径:


win32com.\uuuu gen\u path\uuuu
Olav的回答使我能够搜索关键字“win32com gencache redispatch constants”,并找到了一些有用的链接。比如,我的问题重复了。这指向一个ActiveState页面,其中包含这方面的介绍。奇怪的是,该页面指出client.Dispatch应该足以获取constnats,但我发现它不足以获取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.1\App\lib\site-packages\win32com\client\__init__.py", line 170, in __getattr__
      raise AttributeError(a)
  AttributeError: wdWindowStateMinimize
Portable Python >>> word = com.gencache.EnsureDispatch("Word.Application")
Portable Python >>> c.wdWindowStateMinimize
2
Portable Python>>>从win32com导入客户端作为com
可移植Python>>>从win32com.client将常量导入为c
可移植Python>>>word=com.Dispatch('word.Application')
可移植Python>>>c.WDWindows
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“F:\PORTAB~1.1\App\lib\site packages\win32com\client\\ uuuuu init\uuuuuu.py”,第170行,在\uuuu getattr中__
提高属性错误(a)
AttributeError:WDWindowsStateMinimize
可移植Python>>>word=com.gencache.EnsureDispatch(“word.Application”)
可移植Python>>>c.WDWindows
2.

太棒了!这就成功了。额外的数据不适合评论,我将作为单独的答案发布。回答很好。但是我找不到
gen\u py
目录,也找不到我的网站包中生成的任何内容。然而,这确实解决了问题。我担心在与py2exe或pyinstaller绑定后在独立上下文中使用它。假设这会生成.py文件(然后加载它们)?以前有人这样做过吗?或者至少知道有什么简单的方法可以将这些.py文件的生成/使用指向一个临时目录,也许因为我不希望在客户机上安装python?我可以深入到库中并自定义它,但是一个现成的解决方案会更好。@BuvinJ:看来他们已经为makepy更改了outputfolder。如果我运行此操作,我会得到文件夹:
win32com.\uuu gen\u path\uuuu
这里的文件夹是'C:\\Users\\Olav\\AppData\\Local\\Temp\\gen\u py\\3.6',我无法帮助您回答其他问题。谢谢!那很有用。所以,他们至少现在正在向临时文件夹写入数据。杰出的我将检查我的
win32com.\uuuuu gen\uu path\uuuu
值。我从未遇到过这样的场景,在编译的上下文中运行,在编译的上下文中动态生成并导入脚本。但是,我知道py2exe和pyinstaller嵌入了一个解释器,能够执行
eval
语句。所以,一定有办法引进这一代人。更糟糕的是,我会调整库,使它完全跳过文件编写,我想…您提到的ActiveState页面声明您必须首先生成这些文件。之后,您只能通过
win32com.client的
Dispatch
constants
访问常量。奥利弗:请阅读我在Olva的答案下的评论。(我想你可能知道我的后续问题的答案。)