0

我正在尝试使用函数调用在 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

4

1 回答 1

3

据我从 Excel API 中可以看出,您从属性中获得了Range回报,并从其成员那里获得了更远的回报。然后,您可以使用属性访问器访问该单个项目的属性。CellsRangeItem

# 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 将它们视为精确的无替换文字。当您声明一个过程时这很好,但当您想要调用该过程并使用结果时就没有那么有用了。

于 2012-08-14T08:22:21.190 回答