# 前言: 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