将输出写入不同列中的Excel

时间:2015-01-24 14:23:49

标签: excel file recursion tcl

您好我使用tcl写输出xls文件。 但是我成功地将输出写入一列中的xls文件,但是我想在理智的时间拆分并写入两个不同的列。 我写入一列的代码工作正常:

 set fh [open $e w]
  while {[llength $c]} {
    set name [lindex $c 0]
    set c [concat [glob -nocomplain -directory [lindex $c 0] -type d *] [lrange $c 1 end]]
    set filesofDirectory [glob -nocomplain -directory $name -type f *]

        if { [llength $filesofDirectory] > 0 && $d == "fftc"} {
                set x "number of files in $name is  [llength $filesofDirectory]"


                puts $fh [join $x ]
        } 
    }
    close $fh

但是,当我修改相同的代码以获得输出时:

 set fh [open $e w]
  while {[llength $c]} {
    set name [lindex $c 0]
    set c [concat [glob -nocomplain -directory [lindex $c 0] -type d *] [lrange $c 1 end]]
    set filesofDirectory [glob -nocomplain -directory $name -type f *]

        if { [llength $filesofDirectory] > 0 && $d == "fftc"} {
                set x "number of files in $name"
                set y [llength $filesofDirectory]

                puts $fh [join $x "," $y]
        } 
    }
    close $fh

请建议解决方法

1 个答案:

答案 0 :(得分:1)

要将目录细分转储到可在Excel中使用的CSV文件中,此代码应该有效:

package require csv

set c .
set d fftc
set e foo.csv

proc glob2csv {c d fh} {
    foreach name $c {
        if {[file isdirectory $name]} {
            set n [llength [glob -nocomplain -directory $name -type f *]]
            if {$n > 0 && $d eq "fftc"} {
                chan puts $fh [csv::join [list "number of files in $name is" $n]]
            }
            glob2csv [glob -nocomplain -directory $name -type d *] $d $fh
        }
    }
}

try {
    open $e w
} on ok fh {
    glob2csv $c $d $fh
} finally {
    catch {chan close $fh}
}

我在这里做了很多令人不安的假设,因为我真的不知道你的代码是什么。您可能希望使用csv::join的可选参数来调整CSV文件的格式。例如,在我的语言环境中,我需要将分隔符设置为制表符(\t),以避免Excel将每一行视为单个字符串。

Tcllib CSV module

的文档

文档:catchchanfileforeachglobiflist,{{3 }},llengthopenpackageprocset