【问题标题】:How to open Excel file written with incorrect character encoding in VBA如何在 VBA 中打开以错误字符编码编写的 Excel 文件
【发布时间】:2011-05-26 04:33:09
【问题描述】:

我使用文本编辑器阅读了一个 Excel 2003 文件以查看一些标记语言。 当我在 Excel 中打开文件时,它显示不正确的字符。在检查文件时,我看到编码是 Windows 1252 或类似的。如果我用 UTF-8 手动替换它,我的文件可以正常打开。好的,到目前为止一切顺利,我可以手动更正。

现在的诀窍是这个文件是自动生成的,我需要使用桌面上的有限工具(没有 perl 或其他脚本语言)自动处理它(无需人工交互)。

有没有什么简单的方法可以用正确的编码在 VBA 中打开这个 XL 文件(并忽略文件中指定的编码)?

注意,Workbook.ReloadAs 对我不起作用,它会在出错时退出(并且需要手动操作,因为文件已经打开)。

或者是纠正文件通过一些箍的唯一方法?要么:输入文本,检查编码字符串的行,如果需要替换,将每一行写入新文件......;还是先导出为csv,然后再从csv中导入特定的编码,保存为xls?

任何提示表示赞赏。

编辑:

ADODB 对我不起作用(XL 表示用户定义类型,未定义)。

我通过解决方法解决了我的问题:

name2 = Replace(name, ".xls", ".txt")
Set wb = Workbooks.Open(name, True, True) ' open read-only
Set ws = wb.Worksheets(1)
ws.SaveAs FileName:=name2, FileFormat:=xlCSV
wb.Close False                    ' close workbook without saving changes
Set wb = Nothing                  ' free memory
Workbooks.OpenText FileName:=name2, _
                   Origin:=65001, _
                   DataType:=xlDelimited, _
                   Comma:=True

【问题讨论】:

  • 您正在使用文本编辑器阅读什么样的“Excel 2003 文件”?
  • 看起来像 html 或 xml 类型的格式(我意识到可能不是特定于 XL2003)。
  • 没有机会更改生成文件的代码?
  • @datatoo: 不,第三方,封闭源代码。

标签: character-encoding excel excel-2003 vba


【解决方案1】:

我认为你可以从 另一个 工作簿中做到这一点。添加对 AcitiveX 数据对象的引用,然后添加此子项:

Sub Encode(ByVal sPath$, Optional SetChar$ = "UTF-8")

    Dim stream As ADODB.stream
    Set stream = New ADODB.stream

    With stream
        .Open
        .LoadFromFile sPath ' Loads a File
        .Charset = SetChar  ' sets stream encoding (UTF-8)
        .SaveToFile sPath, adSaveCreateOverWrite
        .Close
    End With

    Set stream = Nothing
    Workbooks.Open sPath
End Sub

然后使用关闭编码的文件路径调用此子程序。

【讨论】:

  • 我想尝试一下,但我的 VBA/Excel 组合版本似乎不了解 ADODB。所以我无法测试你的解决方案,尽管它看起来很吸引人。
  • @asoundmove 很奇怪。在参考下,它应该列在 Microsorft ActiveX 数据对象 2.8 库中。我相信您可以通过 MDAC 包中的link 从 Microsoft 免费下载它。
  • @asoundmove 你也可以尝试后期绑定 Steam 对象 - Dim obj As Object; Set obj = CreateObject("ADODB.stream"); With obj ...
  • 确保检查参考并按照史蒂夫马洛里的建议启用 ADODB,你应该能够让它工作
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 2017-09-04
相关资源
最近更新 更多