如何使用TCL在Excel中读取“ó”等特殊字符?

时间:2014-01-30 21:07:10

标签: excel tcl ascii

我的.xls文件中有一些特殊字符。我试图读取.xls中的所有行并将它们写入.txt文件,但字符已更改。例如: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;

知道如何避免这种情况吗?

2 个答案:

答案 0 :(得分:1)

直接观点:

  1. .xls格式是二进制格式,因此您应该使用:

    set Channel_Read [open "Sample.xls" rb]
    

    (打开后直接fconfigure $Channel_Read -translation binary;它等效。)

    同样,如果您将其转储到另一个文件,使用a+b作为开放模式 - 出于同样的原因 - 将停止输出修改。

  2. 对于从一个频道到另一个频道的直接复制,请使用fcopy而不是循环。 fcopy命令使用一些低级技巧来更有效地执行操作。

    fcopy $Channel_Read $Channel_Write
    
  3. 但是,我真的怀疑除了您提供的信息中直接显示的内容之外,还有其他事情发生。 Tcl不会以你描述的方式破坏字节(我知道编码引擎正在做什么,并且它不适用于任何编码)。更重要的是,与电子表格相关的“线”概念明显偏离;电子表格没有行,它们有行(和列和表),并且它们根本不需要以相同的方式排列。我也不明白为什么将二进制电子表格附加到另一个文件是一件好事。

    我认为你需要停下来,想想你正在尝试做的更广泛的任务,然后尝试解决这个问题,而不仅仅是解决这个问题。虽然我可以更深入地回答您的直接问题,但我怀疑如果我这样做,我就不会给你真正有帮助的帮助。

答案 1 :(得分:0)

无需重新发明轮子。使用TCOM软件包,该软件包专为您正在尝试的内容而设计。以下是一些示例:Tcom examples for Microsoft Excel