tcl语言: 通过tcom调用excel的笔记

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

 

posted on 2016-05-27 10:51  JayveeYao  阅读(5312)  评论(1编辑  收藏  举报

导航