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   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM