从Python自动化Excel时在Range.Address上出现"TypeError: 'unicode'对象不可调用"错误

1 投票
1 回答
1469 浏览
提问于 2025-04-16 18:02

根据标题,当我在 Python 2.6 中运行下面的代码时,出现了以下错误:

print range.Address(RowAbsolute=False, ColumnAbsolute=False)

我知道这个错误的意思,但 MSDN 页面(http://msdn.microsoft.com/en-us/library/aa174749(v=office.11).aspx)说这个是有效的,并且里面有个例子。我在 EXCEL VBA 中试过这个,结果是可以的。

TypeError: 'unicode' object is not callable

有什么想法吗?

谢谢。

Doanld

import win32com.client

xlApp =  win32com.client.DispatchEx('Excel.Application')
xlApp.Visible = True

objWkb = xlApp.Workbooks.Add()
objSht = objWkb.Worksheets(1)
objSht.Cells(2,2).Value = '1'
objSht.Cells(2,3).Value = '2'

range = objSht.Cells(2,4)
range.Value = '=%s+%s' % (objSht.Cells(2,2).Address, objSht.Cells(2,3).Address)
range.AddComment('Test Comment')

print range.Address
print range.Address(RowAbsolute=False, ColumnAbsolute=False)

objWkb.Close(SaveChanges=False) #to avoid prompt

xlApp.Quit()
xlApp.Visible = 0 #must make Visible=0 before del self.excelapp or EXCEL.EXE remains in memory.
del xlApp

1 个回答

4

Range.Address 是一个 带参数的属性。当你像访问属性一样去获取它的值时,它会返回一个值,但你也可以像调用方法一样,带上参数去使用它。PyWin32 这个库不直接支持带参数的属性。为了绕过这个限制,它为每个支持参数的属性提供了一个 GetXXXXX 方法。你可以这样使用:

range.GetAddress(RowAbsolute=False,ColumnAbsolute=False)

这个方法可以带关键词使用,也可以不带关键词。

你可以选择以下两种方式:

range.GetAddress()
range.Address

来读取这个属性的值。

撰写回答