VBA将TXT文档的UTF-8编码转换为ANSI

发布时间:2024年01月10日

? ? ? ? 当我们使用VBA语句直接读取txt文档或将其导入到Excel工作簿时,如果遇到UTF-8编码的文档经常会出现乱码,因此我们需要将txt文档的编码转换为ANSI后再读取。下面是我编写的一个将UTF-8编码换为ANSI编码的函数UTF8TOANSI,这个函数只需要一个参数filePath,它是指TXT文档的路径,使用它转换之后会生成一个同名文件加“_ANSI”的txt文档。关于该函数的使用方法,详见《VBA读取txt文档指定行与列的值》一文。

Function UTF8TOANSI(filePath As String)
'
' 将TXT编码UTF8转换为ANSI
 
    Dim fso As Object
    Set fso = CreateObject("scripting.filesystemobject")
    If Not fso.fileExists(filePath) Then
        MsgBox "txt文件" & filePath & "不存在" & vbCrLf & vbCrLf & "UTF8转ANSI失败!", vbOKOnly + vbCritical, "错误"
        UTF8TOANSI = False
        Exit Function
    End If
    
    Dim txtFile1, txtFile2 As String, columnIndex As Integer
    txtFile1 = filePath
    txtFile2 = Left(filePath, Len(filePath) - 4) & "_ANSI.txt"
    If fso.fileExists(txtFile2) Then fso.DeleteFile (txtFile2)    ' 检查并删除旧文件

    ' 开始转换
    Dim ADOStrm As Object, txtStr As String
    Set ADOStrm = CreateObject("ADODB.Stream")
    ADOStrm.Type = 2
    ADOStrm.Mode = 3
    ADOStrm.Charset = "utf-8"
    ADOStrm.Open
    ADOStrm.LoadFromFile txtFile1    ' 加载TXT文本 txtFile1
    txtStr = ADOStrm.ReadText
    ADOStrm.Position = 0
    ADOStrm.Charset = "gbk"
    ADOStrm.WriteText txtStr
    ADOStrm.SetEOS
    ADOStrm.SaveToFile txtFile2, 2    ' 输出TXT文本 txtFile2
    ADOStrm.Close
    Set ADOStrm = Nothing
    Set fso = Nothing
    
    UTF8TOANSI = True
End Function

文章来源:https://blog.csdn.net/bigtoothcat/article/details/135492658
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。