最近突然需要用到Excel做動態報表,所以就把很久沒用的DDE拿了出來。這篇文章以一個很簡的例子來說明,Excel透過DDE讀取Tcl變數的方法。
E05.1 註冊DDE服務
要讓Excel透過DDE讀取Tcl裡的變數,是很簡單的,只要註冊一組DDE的服務就可以了,如下的例子:
package require dde
dde servername MyTopic
set var1 "abc"
set var2 "123"
entry .t1 -textvariable ::var1
entry .t2 -textvariable ::var2
button .btn -text "exit" -command {exit}
pack .t1 .t2 .btn -expand 1 -fill both
這個程式的重點在第3行,它在目前的Tcl直譯器,註冊1個service name為TclEval(必然是這個值)且topic name為MyTopic的DDE服務。一但Tcl程式的DDE服務註冊完成,你就可以在Excel的任一儲存格中用DDE的連結語法來讀取Tcl的變數。
E05.2 DDE連結語法
在Excel中你可以在任一儲存格用下列的DDE連結語法來存取Tcl的變數值,當然前提是Tcl對應的DDE服務必需存在。=TclEval|MyTopic!'變數名稱'
這個語法的開頭是一個「=」等號,然後TclEval及MyTopic中間有一個「|」管號,然後MyTopic及變數名稱中間用「!」驚嘆號隔開。如下圖,我在Excel的A1及A2儲存格上讀取var1及var2變數的值,請注意!! A1及A2中輸入的是DDE的連結語法,並不是「abc」及「123」。
e05-1
按右上方的「#」號切換側邊欄