使用带有函数调用的TCOM / TCL设置单元值

我正在尝试使用函数调用在TCOM中分配单元格值。 但我看到确切的function名称打印。

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 

我想要replace$cells_worksheet1 Item 27 B $Attribute$cells_worksheet1 Item 27 B {[getAttribute]}其中getAttribute函数返回$attribute 。 任何想法如何做到这一点?

就我所见,从Excel API中,你可以从Cells属性返回一个Range ,并从它的Item成员返回一个Range 。 然后可以使用属性访问器访问该单个项目的属性。

 # 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! 

尽pipe如此,对于所有的房产来说,这并不一定好。 问题不是你不能要求他们,而是有些人想要获取额外的信息,而另外一些人则需要额外的工作来提取一次,因为他们本身就是复合对象。 如果不知道你打算如何处理这个问题,很难给出更好的build议。


大括号的问题在于,Tcl把它们当作精确的免replace文字。 当你声明一个过程的时候,这很好,但是当你想调用这个过程并使用结果时,这并不是那么有用。