zoukankan      html  css  js  c++  java
  • 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   
    【@JayveeYao】
  • 相关阅读:
    CentOS 7部署KVM之三基本管理
    CentOS 7部署KVM之二安装配置
    CentOS 7部署KVM之一架构介绍
    DOM 事件流
    渐进增强与优雅降级
    (三)跟我一起玩Linux网络服务:DHCP服务配置之主服务器配置
    (二)跟我一起玩Linux网络服务:BIND的自动部署(附上完整的代码)
    责任链模式--行为模式
    装饰模式--- 结构型模式
    elastic-job+zookeeper实现分布式定时任务调度的使用(springboot版本)
  • 原文地址:https://www.cnblogs.com/JayveeYao/p/5533837.html
Copyright © 2011-2022 走看看