1 intToChar.tcl
  2 
  3 # input a number : 1 to 32 , you will get a char A to Z
  4 #A-Z:1-32
  5 proc intToChar {int} {
  6     if {![string is integer $int]} {
  7         return "Please input a number!"
  8     } 
  9     if {![expr 0<$int&&32>$int]} {
 10         return "Input a numer range 1 to 32!"
 11     } 
 12     set listChars [list A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
 13     set intTemp [expr $int-1]
 14     return [lindex $listChars $intTemp]
 15 }
 16 
 17 #test
 18 #return [intToChar 1]
 19 
 20 xls_read.tcl
 21 package require tcom
 22 source intToChar.tcl
 23 proc xls_read {fileName} {
 24     if {![file exists $fileName]} {
 25         return {File is not existed!}
 26     }
 27 #    set fileName {D:/test.xlsx}
 28     # 创建com实例,打开工作表
 29     set application [::tcom::ref createobject "Excel.Application"]
 30     $application Visible 0
 31     set workbooks [$application Workbooks]
 32     set workbook [$workbooks Open $fileName]
 33     set worksheets [$workbook Worksheets]
 34     #set worksheet [$worksheets Item "Sheet1"]
 35     set worksheet [$worksheets Item [expr 1]]
 36     set cells [$worksheet Cells]
 37     
 38     set exeFlag 1
 39     #version 1.1
 40     if {1==$exeFlag} {
 41         ###result
 42         #set result {}
 43         set rowIndex 1
 44         #used max rows count
 45         set rowUsedCount [[[$worksheet UsedRange] Rows] Count]
 46         puts "Max row is $rowUsedCount!"
 47         #used max columns count
 48         set columnsUsedCount [[[$worksheet UsedRange] Columns] Count]        
 49         puts "Max Column is $columnsUsedCount!"
 50         while { $rowIndex <= $rowUsedCount } {
 51             set rowResult {}
 52             set columnIndex 1
 53             while { $columnIndex <= $columnsUsedCount } {
 54                 set value [[$cells Item $rowIndex [intToChar $columnIndex]] Value]
 55     #            puts $rowNumber+$columnNumber
 56                 #show every value
 57 #                puts $columnValue
 58                 lappend rowResult $value
 59                 #next column
 60                 incr columnIndex
 61             }
 62             puts $rowResult
 63             ###result
 64             #lappend result $rawResult
 65             #read next raw:init orgin vlaue
 66             #next raw
 67             incr rowIndex
 68         }
 69     } 
 70     
 71     #version 1.0
 72     if {-1==$exeFlag} {
 73         ###result
 74         #set result {}
 75         
 76         set rawEnd 0
 77         set columnEnd 0
 78         
 79         set rowNumber 1
 80         set columnNumber 1
 81         while { $rawEnd == 0 } {
 82             set rawResult {}
 83     #        set columnNumber 1
 84             while { $columnEnd == 0 } {
 85                 set columnValue [[$cells Item $rowNumber [intToChar $columnNumber]] Value]
 86     #            puts $rowNumber+$columnNumber
 87                 #check column isEnd
 88                 if { $columnValue == ""} {
 89                     set columnEnd 1
 90                     continue
 91                 }
 92                 #show every value
 93 #                puts $columnValue
 94                 lappend rawResult $columnValue
 95                 #next column
 96                 incr columnNumber
 97             }
 98             puts $rawResult
 99             ###result
100             #lappend result $rawResult
101             #read next raw:init orgin vlaue
102             set columnEnd 0
103             set columnNumber 1
104             #next raw
105             incr rowNumber
106             #check row isEnd
107             if {[[$cells Item $rowNumber A] Value] == ""} {
108                 set rawEnd 1
109                 continue
110             }
111         }
112     } 
113     $workbook Close
114     $application Quit
115     ###result
116     #return $result
117 }
118 set filename {D:/test.xlsx}
119 #test 
120 return [xls_read $filename]

 

posted on 2016-04-28 22:33  le.li  阅读(2445)  评论(0编辑  收藏  举报