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]
le.li
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)