2014-01-30 2 views
2

В моем файле .xls есть специальные символы. Я пытаюсь прочитать все строки в .xls и записать их в .txt-файл, но символы изменены. Например: Есть ó s в Excel. TCL Сценарий:Как читать специальные символы, такие как «-» в Excel с TCL?

set Channel_Read [open Sample.xls r] 
set Channel_Write [open Text.txt a+] 
while {[gets $Channel_Read Line]>=0} { 
puts $Channel_Write $Line 
} 
close $Channel_Write 
close $Channel_Read 

После открываю text.txt, ó изменяется на \&\#243;.

Любая идея, как этого избежать?

+1

Вы не можете читать .xls-файл по строке 'gets'. Это запатентованный двоичный формат - вам нужен специальный парсер. –

+0

Возможно, вас заинтересует [этот gitrepo] (https://github.com/willblatt/excelScl). Я сам не пробовал, но выглядит многообещающе. – Jerry

ответ

1

Непосредственные точки:

  1. формат .xls двоичного кода, так что вы должны использовать: (. Или fconfigure $Channel_Read -translation binary сразу после открытия, это эквивалентно)

    set Channel_Read [open "Sample.xls" rb] 
    

    Аналогично , если вы сбрасываете его в другой файл, используя a+b в качестве открытого режима для этого - по тем же причинам - прекратит работу с файлами.

  2. Для прямой копии с одного канала на другой используйте fcopy вместо цикла. Команда fcopy использует некоторые низкоуровневые трюки, чтобы делать что-то более эффективно.

    fcopy $Channel_Read $Channel_Write 
    

Однако, я действительно подозреваю, что что-то происходит, кроме непосредственно раскрывается в информации, которую вы предоставляете. Tcl не манипулирует байтами так, как вы описываете (я знаю, что делает механизм кодирования, и это не работает для какой-либо кодировки). Более того, концепция «линии» по отношению к электронной таблице отчетливо исключена; в таблицах нет строк, у них есть строки (и столбцы и листы), и они не обязательно должны быть организованы одинаково. Я также не понимаю, почему добавление бинарной таблицы в другой файл было бы неплохо.

Я думаю, вам нужно остановиться, подумать о более широкой задаче, которую вы пытаетесь сделать, а затем попытаться решить эту проблему, а не только эту маленькую штуку. Хотя я мог бы ответить на ваши ближайшие вопросы более подробно, я подозреваю, что не буду давать вам действительно полезный помощь, если я это сделал.

+1

Насколько я знаю, '\ &\#243;' - это то, как Excel внутренне представляет '- ... –

0

Не нужно изобретать велосипед. Используйте пакет TCOM, который предназначен именно для того, что вы пытаетесь сделать. Вот несколько примеров: Tcom examples for Microsoft Excel

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