如何通过pywin32获取Excel单元格的R1C1格式地址?
用pywin32获取Excel单元格的R1C1格式地址
在pywin32中直接调用Range.Address(ReferenceStyle=-4150)会触发类型错误,因为Address被映射为只读属性(默认返回A1格式字符串),而非可传参的方法。要获取R1C1格式地址,有两种可行方案:
方案1:调用_Address方法
pywin32对COM对象的同名属性和方法做了区分,带参数的Address方法需要通过_Address调用:
from win32com.client import Dispatch xl = Dispatch("Excel.Application") wb = xl.Workbooks.Open('my_workbook.xlsx') sht = wb.sheets['Sheet1'] c = sht.Range("A1") # ReferenceStyle=-4150对应VBA中的xlR1C1常量 r1c1_address = c._Address(ReferenceStyle=-4150) print(r1c1_address) # 返回 "$R$1C$1"
方案2:用ConvertFormula转换格式
通过Excel应用对象的ConvertFormula方法,将默认的A1格式地址转换为R1C1格式:
from win32com.client import Dispatch xl = Dispatch("Excel.Application") wb = xl.Workbooks.Open('my_workbook.xlsx') sht = wb.sheets['Sheet1'] c = sht.Range("A1") # 参数依次为:原地址、原格式(-4151=xlA1)、目标格式(-4150=xlR1C1) r1c1_address = xl.ConvertFormula(c.Address, -4151, -4150) print(r1c1_address.replace("=", "")) # 去掉开头的等号,返回 "R1C1"
如果需要相对引用格式,可在调用_Address时追加参数:
# 生成相对引用的R1C1地址 r1c1_relative = c._Address(ReferenceStyle=-4150, RowAbsolute=False, ColumnAbsolute=False) print(r1c1_relative) # 对A1单元格返回 "R1C1",对B2单元格返回 "R[1]C[1]"
内容的提问来源于stack exchange,提问作者scotscotmcc
相关产品推荐
相关产品推荐

