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、プロパティからバックを取得し、そのメンバーからCellsさらにバックを取得します。その後、プロパティ アクセサーを使用して、その個々のアイテムのプロパティにアクセスできます。RangeItem

# 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 に答える