如何在Python中导入COM对象命名空间/枚举?
我刚开始学习编程和Python,所以希望能得到一些帮助。我想通过Excel的COM接口把一个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对象完全没有头绪,也不知道怎么导入它,以便找到对应的枚举值。
谢谢!
4 个回答
1
所有的文件格式常量都有详细的说明,您可以在这里找到。
2
当我使用COM来访问QuickBooks时,我可以访问对象下定义的常量,这些常量在一个叫做constants的成员里。代码大概是这样的(你会对第三行感兴趣):
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网页上想选择的任何格式。
10
这个问题有点过时了,但如果你是像我一样从谷歌找到这个页面的,我的解决办法是通过 win32com.client.constants
对象来访问常量,而不是直接在应用程序对象上访问,正如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绑定,如果需要的话。
我发现这个ActiveState页面很有帮助。