我的.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;
。
知道如何避免这种情况吗?
答案 0 :(得分:1)
直接观点:
.xls格式是二进制格式,因此您应该使用:
set Channel_Read [open "Sample.xls" rb]
(打开后直接fconfigure $Channel_Read -translation binary
;它等效。)
同样,如果您将其转储到另一个文件,使用a+b
作为开放模式 - 出于同样的原因 - 将停止输出修改。
对于从一个频道到另一个频道的直接复制,请使用fcopy
而不是循环。 fcopy
命令使用一些低级技巧来更有效地执行操作。
fcopy $Channel_Read $Channel_Write
但是,我真的怀疑除了您提供的信息中直接显示的内容之外,还有其他事情发生。 Tcl不会以你描述的方式破坏字节(我知道编码引擎正在做什么,并且它不适用于任何编码)。更重要的是,与电子表格相关的“线”概念明显偏离;电子表格没有行,它们有行(和列和表),并且它们根本不需要以相同的方式排列。我也不明白为什么将二进制电子表格附加到另一个文件是一件好事。
我认为你需要停下来,想想你正在尝试做的更广泛的任务,然后尝试解决这个问题,而不仅仅是解决这个问题。虽然我可以更深入地回答您的直接问题,但我怀疑如果我这样做,我就不会给你真正有帮助的帮助。
答案 1 :(得分:0)
无需重新发明轮子。使用TCOM软件包,该软件包专为您正在尝试的内容而设计。以下是一些示例:Tcom examples for Microsoft Excel