最近因為工作的關係需要分析Excel工作表的內容,一直在考慮要用VBA好還是用Tcl+tcom好,掙扎了好久最後還是選了Tcl+tcom,採用這種方法是因為....我是Tcl的熱愛者!!哈~。接下來的內容是操作Excel時常遇到的問題,我把它們都部落格下來給大家參考。
E08.1 開啟Excel文件並取得控制儲存格的COM物件
用tcom開啟Excel文件是很容易的一件事,慣用的程式片段如下:
set excel [::tcom::ref createobj Excel.Application]
$excel Visible 1
set workbooks [$excel Workbooks]
set workbook [$workbooks Open "要開啟的Excel檔案"]
當開啟成功,下一步通常是要取得Sheet1 ~ SheetX 的COM物件參考 :
set worksheets [$workbook Worksheets]
set sheet1 [$worksheets Item [expr 1]]
set sheet2 [$worksheets Item [expr 2]]
取得了工作表的COM物件參考後,接下來只要再取得每個工作表的「儲存格集合」的COM物件參考, 就可以隨心所欲的操控每一個儲存格了,程式片斷如下 :
set cells1 [$sheet1 Cells]
set cells2 [$sheet2 Cells]
E08.2 設定及取得指定儲存格的資料
在開始之前,我們要先知道Excel的儲存格中「顯示的資料」及「原始的資料」很有可能是不一樣的,時常「顯示的資料」是「原始的資料」經過格式化的結果,如果說你要取出某個儲存格中原始的資料,可以這麼做 :
set R [expr 1]
set C "A"
set R1C1 [[$cells1 Item $R $C] Value]
上面的程式中cells1 Item 後面可以給兩個參數,分別用來指定儲存格集合中的第「R」列,第「C」行,當命令執行成功後,會回傳對應儲存格的COM物件參考。我們透過儲存格物件的Value屬性把值取出來。
如果你要取出的是格式化後的內容,也就是顯示在儲存格上的內容,要改用Text屬性,像這樣 :
puts [[$cells1 Item $R $C] Text]
如果你想要的是設定儲存格的內容,可以這樣做 :
$cells1 Item $R $C "要設定給儲存格的值"
E08.3 變更儲存格的背景/前景顏色
如果要更改儲存格的背景顏色,則需要使用到儲存格Interior屬性的COM物件參考,使用的方法如下:
set interior [[$cell1 Item $R $C] Interior]
$interior Color [expr 0x0000FF]
上面的例子透過Interior物件把儲存格的背景設為紅色(0xBBGGRR)。 若要改變的是前景顏色,也就是文字的顏色要改用Font屬性的COM物件參考,範例如下 :
set fnt [[$cell1 Item $R $C] Font]
$fnt Color [expr 0xFF0000]
$fnt Bold [expr 1]
上面的例子把文字的顏色設定為藍色,也順道把文字設定為粗體了。 其它常用的功能還有,儲存格文字對齊的功能,像這樣把文字水平及垂直都置中 :
[$cells1 Item $R $C] HorizontalAlignment [expr -4108]
[$cells1 Item $R $C] VerticalAlignment [expr -4108]
如果不了解上面的設定值,不要緊 ~ 請自己看看MSDN就知道了!!
按右上方的「#」號切換側邊欄