# 前言: TCL果然是偏門語言,插入代碼的時候竟然沒這個選項, 只好選成py格式(起碼注釋能被識別^o^)
1 # CoffeeYao 2 3 package require tcom 4 5 #創建頂層類excel,通過tcom打開操作系統的"Excel.Application" 6 # excel類擁有的方法: (Workbooks) #創建excel類創建子類Workbooks 7 # 動作: <Visibe> #是否可視 <DisplayAlters> #是否顯示敏感操作 8 # <Quit> #退出,建議Quit之后再將頂層類設為空集以完全退出"set excel {}",或者用"unset excel" 9 # 10 # 以下代碼中創建名為excel的類,再用Visible動作設為可視、DisplayAlerts設為不敏感, 11 # 最后用Workbooks方法創建名為wbs子類。 注意<動作>是對類本身屬性的操作,而(方法)則產生一個子類 12 set excel [::tcom::ref createobject "Excel.Application"] 13 14 $excel Visible 1 15 $excel DisplayAlerts 0 16 set wbs [$excel Workbooks] 17 18 #Workbooks型的子類wbs擁有的方法(都將創建Workbook型子類): 19 # (Open) #按路徑打開,據目前所知,路徑一定得是windows下的絕對路徑才行,如當前目錄下的ytst0.xls 20 # (Add) #如果Workbooks中已擁有N-1個Workbook型子類,則新建1個名為BookN的 21 # <Count> #統計已擁有的Workbook型子類 22 #Workbook型子類對應的是最直觀的xls文件(當然csv文件效果同樣),如果想 23 # 對多個xls文件進行操作,就需用相應變量存儲起已打開/新建的excel文件 24 # (Worksheets) #創建Worksheets型子類 25 # <SaveAs> #另存為... 26 set wb [$wbs Open [file nativename [file join [pwd] 123.xls]]] 27 set wb2 [$wbs Add] ;#新建一個workbook型子類 28 set wb3 [$wbs Add] 29 $wb SaveAs [file nativename [file join [pwd] test.csv]] 30 $wb2 SaveAs [file nativename [file join [pwd] test2.csv]] 31 $wb3 SaveAs [file nativename [file join [pwd] test3.csv]] 32 set wss [$wb3 Worksheets] 33 34 #Worksheets型的子類wss擁有的方法(都將創建Worksheet型子類): 35 # (Item) #切換定位至某Worksheet子類 36 # (Add) #如果Worksheets中已擁有N-1個Worksheet型子類,則新建1個名為SheetN的 37 # <Count> #統計已擁有的Worksheet型子類 38 #Worksheet型子類對應的是最直觀的xls文件中的sheet,它可以被重定位,因此建議是1個全局變量 39 # (Cells) #創建Cells型子類 40 # <Delete>刪除 <Name>重命名 <Select>選擇占用 <Protect>保護 41 set ws [$wss Item 1] 42 set ws2 [$wss Item 2] 43 set ws3 [$wss Item [$wss Count] ] 44 set ws4 [$wss Add] 45 $ws4 Name newSheet 46 set cells [$ws Cells] ;# sheet1的cells 47 48 #Cells型子類代表的是整個sheet中單元格(統稱為cell型子類) 49 # (Range) #范圍格式形如"$cells Range A1 C2" 50 # (Item) #Cells或Range內的某個單元格,格式形如"$range Item $row $column" 51 # Range型子類也可以有(Item)方法,甚至Item型的子類也可以繼續(Item) 52 # 特別注意Range時候的格式為Y軸+X軸的"y1x1 y2x2" 而Item時的格式為X軸+Y軸的"x y" 53 # 54 #cell型子類(只是個統稱,實際上並沒有這個子類,Range Item 甚至Cells都可以看作cell型) 55 # (Borders)邊框,且Borders有Item型子類border,Borders和Border有<Weight>動作 56 # (Font)字體,Font子類主要有<Bold><Italic><Name><Size>等動作 57 # <Value> #讀取值動作 58 # set> #本身沒有讀值這個動作,這個動作的實現必須由父類實現,如[$cells Item 1 2 setvalue] 59 #更多方法及動作待擴展 60 set range [$cells Range A1 C2] 61 set cellA1 [$cells Item 1 1] 62 set cellA2 [$range Item 2 1] 63 set cellA2A1 [$cellA2 Item 1 1] 64 65 $cells Item 1 1 name ;#x_cell set name 66 [$cells Item 1 1] Value ;#x_cell get 67 $cellA1 Value ;#x_cell get 兩者等價 68 69 # VB示例:Worksheets("Sheet1").Range("A1:C5").Font.Bold = True 70 [$cellA1 Font ] Bold 1 ;#x_cell Font-Bold 1 71 72 73 74 [$cellA1 Borders ] Weight 2 ;#x_cell Borders-Weight 2 75 [[$cellA1 Borders ] Item 9 ] Weight 2 ;#x_cell Borders.9-Weight 4 76 77 # set hLinks_1 [[$cellA1 Hyperlinks] Add $cellA1 s3!A20] 78 79 #set => "Item 1 1" 80 #get => "Value" 81 #font-bold =>"Font ] Bold",且前方自動添加"[" 82 83 set cells $xInfo(cells) ;# dvEXCEL中的cells變量 84 set cellA1 [$cells Item 1 A] 85 set xInfo(hyperLinks,1) [$xInfo(cells) Hyperlinks] 86 set h3 [$xInfo(hyperLinks,1) Add [$cells Item 1 3] "x1.xls" "a20"] 87 $h3 SubAddress "Sheet2!a20" 88 set hLinkKeys { 89 Address Application Creator EmailSubject Name Parent Range ScreenTip Shape 90 SubAddress TextToDisplay Type 91 } 92 foreach i $hLinkKeys { 93 catch {puts "$i = [$h3 $i]"} 94 } 95 [$cellA1 Hyperlinks] Delete ;# 刪除超鏈接 96 97 proc x_hLink {} { 98 } 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116