如何在Python中导入COM对象命名空间/枚举?

时间:2009-10-29 20:08:49

标签: python excel com namespaces enumeration

我对编程/ python比较陌生,所以我很感激我能得到的任何帮助。我想通过COM使用Excel将excel文件保存为特定格式。这是代码:

import win32com.client as win32 

def excel():
    app = 'Excel'
    x1 = win32.gencache.EnsureDispatch('%s.Application' % app)
    ss = x1.Workbooks.Add()
    sh = ss.ActiveSheet
    x1.Visible = True
    sh.Cells(1,1).Value = 'test write'
    ss.SaveAs(Filename="temp.xls", FileFormat=56)
    x1.Application.Quit()

if __name__=='__main__':
    excel()

我的问题是,如果我没有明确知道它的代码,我该如何指定FileFormat?浏览文档,我找到了关于FileFormat对象的参考。我对如何访问XlFileFormat object并以一种我可以找到它的枚举值的方式导入它一无所知。

谢谢!

4 个答案:

答案 0 :(得分:10)

这个问题有点陈旧,但是对于那些从Google访问此页面的人(正如我所做的那样),我的解决方案是通过win32com.client.constants对象而不是应用程序对象本身as suggested by Eric访问常量。这使您可以像使用VBE一样使用枚举常量:

>>> import win32com.client
>>> xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
>>> C = win32com.client.constants
>>> C.xlWorkbookNormal
-4143
>>> C.xlCSV
6
>>> C.xlErrValue
2015
>>> C.xlThemeColorAccent1
5

此外,除非您手动运行makepy实用程序,否则在使用常规win32com.client.Dispatch(..)方法初始化应用程序时,常量可能不可用,这是我遇到的另一个问题。如果需要,使用win32com.client.gencache.EnsureDispatch(..)(作为提问者)检查并在运行时生成Python绑定。

我发现this ActiveState page有帮助。

答案 1 :(得分:2)

当我使用COM访问quickbooks时,我可以达到在对象的常量成员下定义的常量。代码看起来像这样(你会被置于第三行):

self._session_manager.OpenConnection2("",
                                      application_name,
                                      QBFC8Lib.constants.ctLocalQBD)

我不确定这是否有效,但请尝试一下:

import win32com.client as win32 

def excel():
    app = 'Excel'
    x1 = win32.gencache.EnsureDispatch('%s.Application' % app)
    ss = x1.Workbooks.Add()
    sh = ss.ActiveSheet
    x1.Visible = True
    sh.Cells(1,1).Value = 'test write'
    ss.SaveAs(Filename="temp.xls", FileFormat=x1.constants.xlWorkbookNormal)
    x1.Application.Quit()

if __name__=='__main__':
    excel()

将xlWorkbookNormal替换为您在问题中发布的X1FileFormat网页中尝试选择的任何格式。

答案 2 :(得分:1)

所有文件格式常量都记录在案here

答案 3 :(得分:0)

作为一般规则,我发现在Excel中预先编写vba ide中的代码非常有用。这样你就可以找到你需要在你的python代码中使用的常量等的所有值。您还可以确保在更受控制的环境中工作。