2012-08-13 49 views
0

我想使用函数调用在TCOM中分配单元值。但我看到确切的功能名称打印。使用函数调用TCOM/TCL设置单元值

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

我想通过'file nativename [file normalize $ filename.csv]'生成'Open'的名字。 Tcl为这类事情准备了很好的工具。 – 2012-08-14 08:24:54

回答

3

据我所见,从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! 

因为虽然所有的性质不一定会很好地工作;问题不在于你无法向他们索要,而是有些人想要获取额外的信息,而其他人则需要额外的工作才能提取一次,因为它们本身就是复合对象。如果不知道你打算如何处理它,很难提供更好的建议。


大括号的问题在于Tcl将它们视为确切的免替换文字。当你声明一个过程时,这很好,但当你想调用这个过程并使用结果时,它并不是那么有用。