簡體   English   中英

使用Win32com Python中的Range和Union方法

[英]Using the Range and Union methods from Win32com Python

一個新的Python程序員。 我有問題,希望您能幫助我。 我正在做的是通過Python在Excel工作表中標記單元格。 並假設我每次需要使用Union時都為無數單元格定義一個名稱。 因此它將是范圍的聯合。 現在,我正在查看VBA代碼,並使用win32com將其轉換為Python語法。 如果Range是幾個單元格,例如50個左右,則我不需要Union,但對於大多數單元格,我都不需要。 這就是問題所在。 我想出了以下代碼,但最終得到了

“ TypeError:Python實例無法轉換為COM對象”錯誤。

from traits.api import HasTraits, Str, Int, Button,CStr, List
from win32com.client import gencache
import win32com.client,sys,os

class cellTagging(HasTraits):

    wb = "" 
    Data = CStr
    parameter = Str
    read_Write = Str
    sheet = Str
    cell_No = List
    cell_Value = Str
    excel = win32com.client.gencache.EnsureDispatch('Excel.Application')


    def _cell_No_changed(self):
        path=os.getcwd()
        fName = os.path.join(path, sys.argv[1])
        self.wb = cellTagging.excel.Workbooks.Open(fName)
        she = self.wb.ActiveSheet
        length = len(self.cell_No)
        r = []
        for i in self.cell_No:
            r.append(she.Range(",".join(i)))
        print r
        print(r[0])
        print r[1]
        print r[2]
        h = "%s " * len(r) % tuple(r)
        string = h[:-1]
        cellTagging.excel.Union(h).Name = "Test1"
        self.wb.Close(SaveChanges = 1)

    def Run_Macro(self,Macro):
        path=os.getcwd()
        fName = os.path.join(path, sys.argv[1])
        self.wb = cellTagging.excel.Workbooks.Open(fName)
        cellTagging.excel.Application.Run(Macro)
        self.wb.Close(SaveChanges = 1)

if __name__=='__main__':
    cellTagging( parameter = 'demo', read_Write = 'Read', sheet  = 'Testing1', cell_No =        [['A86', 'A87', 'A88', 'A89', 'A90', 'A91', 'A92', 'A93', 'A94', 'A95', 'A96', 'A97', 'A98', 'A99', 'A100', 'A101', 'A102', 'A103', 'A104', 'A105', 'A4', 'B4', 'C4', 'D4', 'E4', 'F4', 'G4', 'H4', 'I4', 'J4', 'K4', 'L4', 'M4', 'N4', 'O4', 'P4', 'Q4', 'R4', 'S4', 'T4', 'U4', 'V4', 'W4', 'X4', 'Y4', 'Z4', 'AA4', 'AB4', 'AC4', 'AD4'], ['AE4', 'AF4', 'AG4', 'AH4', 'AI4', 'AJ4', 'AK4', 'AL4', 'AM4', 'AN4', 'AO4', 'AP4', 'AQ4', 'AR4', 'AS4', 'AT4', 'AU4', 'AV4', 'AW4', 'AX4', 'AY4', 'AZ4', 'BA4', 'BB4', 'BC4', 'BD4', 'BE4', 'BF4', 'BG4', 'BH4', 'BI4', 'BJ4', 'BK4', 'BL4', 'BM4', 'BN4', 'BO4', 'BP4', 'BQ4', 'BR4', 'BS4', 'BT4', 'BU4', 'BV4', 'BW4', 'BX4', 'BY4', 'BZ4', 'CA4', 'CB4'], ['CC4', 'CD4', 'CE4', 'CF4', 'CG4', 'CH4', 'CI4', 'CJ4', 'CK4', 'CL4', 'CM4', 'CN4', 'CO4', 'CP4', 'CQ4', 'CR4', 'CS4', 'CT4', 'CU4', 'CV4', 'CW4', 'CX4', 'CY4', 'CZ4', 'DA4', 'DB4']])

該行hello = cellTagging.excel.Union(h).Name =“ Test1”給我“ TypeError:無法將Python實例轉換為COM對象”錯誤

PS:但是,當我直接將列表元素(范圍)作為hello = cellTagging.excel.Union(r [0],r [1],r [2])。Name =“ Test1”

有用。 我很困惑,任何見解將不勝感激!謝謝!

根據聯合方法 ,聯合方法如下所示:

 expression.Union(Arg1, Arg2, ...)

但是您的代碼將傳遞單個字符串。

h = "%s " * len(r) % tuple(r)    
...
hello = cellTagging.excel.Union(h).Name = "Test1"

鑒於:

hello = cellTagging.excel.Union(r[0],r[1],r[2]).Name = "Test1" 

將傳入三個參數。

暫無
暫無

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

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