Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Character encoding 如何在VBA中打开用错误字符编码编写的Excel文件_Character Encoding_Excel_Excel 2003_Vba - Fatal编程技术网

Character encoding 如何在VBA中打开用错误字符编码编写的Excel文件

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

我阅读了一个带有文本编辑器的Excel2003文件,以查看一些标记语言。 当我在Excel中打开文件时,它会显示不正确的字符。在检查文件时,我发现编码是Windows1252或类似的。如果我手动将其替换为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

嗯,我想你可以从另一本练习册上做。添加对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,您应该能够使其正常工作