2015-01-24 3 views
0

Привет Я использую tcl для вывода вывода файла xls. однако мне удается записать вывод в файл xls в одном столбце, но то, что я хочу разделить и записать в два разных столбца в разумное время. Мой код, который пишет в одном столбце только работает отлично:Запись вывода в excel в другом столбце

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

Ваш вызов 'join' в второй пример неверен. Вы не даете достаточно информации, чтобы понять ваш код или то, что именно вы испытываете. –

+0

Требование состоит в том, чтобы написать вывод, например «количество файлов в d:/folder1 равно 4» в таблицу Excel. Он отлично работает с первым снайпером, так как он записывает его только в один столбец, что я хочу, это написать номер части, скажем 4, в другой столбец, который является вторым столбцом, и «количество файлов в d:/folder1 is» в первый столбец, для которого второй пример фрагмента не работает ... –

+0

Это все еще просто требование или ожидание. Опять же, я предполагаю, что неправильный вызов 'join' является корнем проблемы, но поскольку вы не говорите нам о том, в чем проблема (кроме того, что она не работает), трудно быть уверенным. В любом случае, если вы создаете документы Excel в формате CSV (что похоже на то, что вы не говорите нам, если это правда), вы должны использовать модуль 'csv' вместо операторов' puts'. –

ответ

1

Чтобы сбросить разбивка каталога на файл CSV, который может использоваться в Excel, этот код должен работать:

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

Документация: catch, chan, file, foreach, glob, if, list, llength, open, package, proc, set, try

+0

u r гениальный .... большое спасибо u –

Смежные вопросы