我正在尝试使用函数调用在TCOM中分配单元格值。但是我看到了打印的确切函数名称。
set application [::tcom::ref createobject "Excel.Application"]
set workbooks [$application Workbooks]
$application DisplayAlerts False
set workbook [$workbooks Open "\\$filename.csv"]
set worksheets [$workbook Worksheets]
set worksheet [$worksheets Item [expr 1]]
set cells_worksheet1 [$worksheet Cells]
$cells_worksheet1 Item 27 B $Attribute
我想将$cells_worksheet1 Item 27 B $Attribute
替换为$cells_worksheet1 Item 27 B {[getAttribute]}
getAttribute
函数返回$attribute
。知道怎么做吗?
答案 0 :(得分:3)
就我在Excel API中看到的那样,您从Cells
属性返回Range
,从Range
成员返回Item
。然后,您可以使用属性访问器访问该单个项目的属性。
# Assuming your largely-perfect code from your question...
set cell [$cells_worksheet1 Item 27 B]
set orientation [$cell Orientation] ;# Arbitrary example of getting a property
$cell Orientation 42 ;# Setting the property
您可以从文字以外的来源获取要操作的属性名称:
proc getAttribute {} {
return "Orientation"
}
puts "orientation is [$cell [getAttribute]]" ;# Note, *no* {braces} involved!
但这并不一定适用于所有房产;问题不在于你不能要求它们,而是有些人想要在获取它们时传递额外的信息,而其他人则需要额外的工作来提取一次,因为它们本身就是复合对象。如果不确切知道你打算用它做些什么,就很难提出更好的建议。
大括号的问题是Tcl将它们视为准确的无替换文字。当你声明一个程序时,这很好,但是当你想调用那个程序并使用结果时,它就没用了。