2014-01-30 86 views
2

我的.xls文件中有一些特殊字符。我正在嘗試讀取.xls中的所有行,並將它們寫入.txt文件,但字符已更改。例如:Excel中有ó。 TCL腳本:如何使用TCL在Excel中讀取「ó」等特殊字符?

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

不能用'gets'逐行讀取.xls文件。這是一種專有的二進制格式 - 您需要一個特殊的解析器。 –

+0

您可能對[this 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如何在內部表示一個'ó'... –

相關問題