Character encoding 如何在VBA中打开用错误字符编码编写的Excel文件
我阅读了一个带有文本编辑器的Excel2003文件,以查看一些标记语言。 当我在Excel中打开文件时,它会显示不正确的字符。在检查文件时,我发现编码是Windows1252或类似的。如果我手动将其替换为UTF-8,我的文件将正常打开。好的,到目前为止还不错,我可以手动更正 现在的诀窍是这个文件是自动生成的,我需要使用桌面上的有限工具(没有perl或其他脚本语言)自动处理它(没有人机交互) 有没有简单的方法可以用正确的编码在VBA中打开这个XL文件(并忽略文件中指定的编码) 注意,Workbook.ReloadAs对我不起作用,它会在出现错误时退出(并且需要手动操作,因为文件已经打开) 或者是唯一的方法来纠正文件通过一些箍?或者:输入文本,检查编码字符串的行,如果需要,替换,将每行写入新文件。。。;或者导出到csv,然后使用特定编码再次从csv导入,另存为xls 任何提示,不胜感激 编辑: ADODB不适用于我(XL表示用户定义类型,未定义) 我通过一个变通方法解决了我的问题:Character encoding 如何在VBA中打开用错误字符编码编写的Excel文件,character-encoding,excel,excel-2003,vba,Character Encoding,Excel,Excel 2003,Vba,我阅读了一个带有文本编辑器的Excel2003文件,以查看一些标记语言。 当我在Excel中打开文件时,它会显示不正确的字符。在检查文件时,我发现编码是Windows1252或类似的。如果我手动将其替换为UTF-8,我的文件将正常打开。好的,到目前为止还不错,我可以手动更正 现在的诀窍是这个文件是自动生成的,我需要使用桌面上的有限工具(没有perl或其他脚本语言)自动处理它(没有人机交互) 有没有简单的方法可以用正确的编码在VBA中打开这个XL文件(并忽略文件中指定的编码) 注意,Workboo
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
嗯,我想你可以从另一本练习册上做。添加对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
然后调用此子文件,并使用关闭编码的文件路径 好吧,我想你可以从另一本工作簿上完成。添加对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
然后调用此子文件,并使用关闭编码的文件路径 您使用文本编辑器阅读的是什么类型的“Excel 2003文件”?看起来像html或xml类型的格式(我意识到可能不是特定于XL2003)。不可能更改生成文件的代码?@datatoo:不,第三方,封闭源代码。您使用文本编辑器阅读的是什么类型的“Excel 2003文件”?看起来像html或xml类型的格式(我意识到可能不特定于XL2003)。没有机会更改生成文件的代码?@datatoo:没有,第三方,封闭源代码。我想尝试一下,但我的VBA/Excel组合版本似乎不了解ADODB。因此,我无法测试您的解决方案,因为它看起来很吸引人。@asoundmove非常奇怪。在“引用”下,它应该列在Microsorft ActiveX数据对象中2.8库。我相信您可以在MDAC包中从Microsoft免费下载。@asoundmove您也可以尝试延迟绑定steam对象-
Dim obj As object;Set obj=CreateObject(“ADODB.stream”);使用obj…
确保在“引用”下检查并启用ADODB,正如Steve Mallory建议的那样,您应该能够使其正常工作。我想尝试一下,但我的VBA/Excel组合版本似乎不了解ADODB。因此,我无法测试您的解决方案,因为它看起来很吸引人。@asoundmove非常奇怪。在“引用”下,它应该d将在MicrosoftActiveX数据对象2.8库中列出。我相信您可以在MDAC包中从Microsoft免费下载。@asoundmove您也可以尝试延迟绑定steam对象-Dim obj作为对象;设置obj=CreateObject(“ADODB.stream”);使用obj…
确保在“引用”下进行检查,并按照Steve Mallory的建议启用ADODB,您应该能够使其正常工作