【问题标题】:How to read special characters like "ó" in Excel with TCL?如何使用 TCL 在 Excel 中读取“ó”等特殊字符?
【发布时间】:2014-01-30 21:07:09
【问题描述】:

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

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

【问题讨论】:

  • 您无法使用 gets 逐行读取 .xls 文件。这是一种专有的二进制格式——你需要一个特殊的解析器。
  • 您可能对this gitrepo 感兴趣。我自己没有尝试过,但看起来很有希望。

标签: excel tcl ascii


【解决方案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
    

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

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

【讨论】:

  • 据我所知,\&\#243; 是 Excel 在内部表示 ó...
【解决方案2】:

无需重新发明轮子。使用TCOM 包,它专为您想要做的事情而设计。以下是一些示例:Tcom examples for Microsoft Excel

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 2014-11-30
    • 1970-01-01
    • 2010-11-11
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多