簡體   English   中英

如何在 Python 中導入 COM 對象命名空間/枚舉?

[英]How do I import a COM object namespace/enumeration in Python?

我對編程/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 對象並以我可以找到它的枚舉值的方式導入它一無所知

謝謝!

這個問題有點陳舊,但是對於那些從 Google 訪問此頁面的人(就像我一樣),我的解決方案是通過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 頁面很有幫助。

當我使用 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 網頁中嘗試選擇的任何格式。

所有文件格式常量都記錄在此處

作為一般規則,我發現在 Excel 中預先記錄 VBA IDE 中的任何代碼非常有用。 通過這種方式,您可以找出需要在 Python 代碼中使用的常量等的所有值。 您還可以確保在更可控的環境中工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM