簡體   English   中英

python win32com excel >> ws.cells(1, 1).value 不起作用

[英]python win32com excel >> ws.cells(1, 1).value does not work

我已經使用 win32com.client 來處理 excel。

至此,“.cells(1, 1).value”方法成功讀取了row1,column1中的值。

但從現在開始,該代碼不起作用。 它發生錯誤>>'<win32com.gen_py.Microsoft Excel 16.0 Object Library._Worksheet instance at 0x2284591006720>'對象沒有屬性'cells'

什么是問題?

xlsApp = win32com.client.GetActiveObject("Excel.Application")
wb = xlsApp.Workbooks(wb_name)
ws = wb.Worksheets(ws_name)

test = ws.cells(1, 1).value
print(test)

方法名稱是Cells() ,大寫的“C”是簡單的答案。

公平地問:“如果cells()以前有效,為什么現在不有效?”。 恕我直言,這是win32com的失敗。

如果被詢問,win32com 將為 COM 對象生成一個包裝器(使用名為gen_py的包,它為每個對象創建一個 Python 文件)。 如果存在這樣的包裝器,win32com 將默認使用它。 此包裝器區分大小寫。 這是“早期綁定”。

如果沒有包裝器,那么像GetActiveObject()Dispatch()之類的調用將使用“后期綁定”,其中 win32com 將嘗試在對象上調用您想要的任何方法(無論該方法是否存在)。 該包采用您要求的任何方法,並嘗試通過IDispatch.GetIdsOfNames()從 COM 對象獲取該函數的 ID。 至關重要的是,此查找不區分大小寫:使用cells()Cells()甚至cElLs()都可以。

這就是問題所在。 生成的包裝器存儲在用戶的目錄中。 您的代碼可能已經愉快地使用了后期綁定和cells() ,但另一個程序可能在以后創建了包裝器。 現在您的代碼將看到這個包裝器並切換到早期綁定,現在cells()不再起作用:您需要使用Cells()

因此,當使用 win32com 時,總是值得從參考中找出確切的函數名稱,例如從這里

暫無
暫無

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

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