You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA导入CSV文件时如何设置UTF-8编码?

解决VBA导入UTF-8编码CSV文件的问题

原代码使用Open和Line Input语句读取文件,这类方法依赖系统默认编码,无法正确识别UTF-8编码的内容,导致非ASCII字符(如中文)乱码。以下提供两种可靠的解决方案:

方法一:使用ADODB.Stream读取UTF-8内容

通过ADODB.Stream组件直接按UTF-8编码读取文件内容,再拆分处理数据,兼容带BOM和不带BOM的UTF-8文件:

Sub ImportCSV_UTF8()
    Dim dialogBox As FileDialog
    Dim selectedFile As String
    Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)

    With dialogBox
        .Filters.Add "CSV", "*.CSV", 1
        .AllowMultiSelect = False
        If .Show = True Then
            selectedFile = .SelectedItems(1)
        End If
    End With

    If selectedFile = "" Then Exit Sub

    ' 初始化ADODB.Stream读取UTF-8文件
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
    With stream
        .Charset = "UTF-8"
        .Open
        .LoadFromFile selectedFile
        Dim fileContent As String
        fileContent = .ReadText
        .Close
    End With

    ' 按行拆分文件内容
    Dim lines As Variant
    lines = Split(fileContent, vbCrLf)

    Dim rowNumber As Long
    Dim lineItems As Variant
    Dim iteration As Integer
    rowNumber = 1

    ' 逐行写入到指定区域
    For Each line In lines
        If Trim(line) <> "" Then ' 跳过空行
            lineItems = Split(line, ";")
            For iteration = 0 To UBound(lineItems)
                If iteration <= 14 Then ' 限制到原代码的15列范围
                    Range("ImportRange").Cells(rowNumber, iteration + 1) = lineItems(iteration)
                End If
            Next
            rowNumber = rowNumber + 1
        End If
    Next

    Set stream = Nothing
End Sub

方法二:用Workbooks.Open直接导入UTF-8 CSV

利用Excel内置的文件打开功能,指定UTF-8编码参数,代码更简洁,适合无需逐行处理的场景:

Sub ImportCSV_UTF8_Alternative()
    Dim dialogBox As FileDialog
    Dim selectedFile As String
    Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)

    With dialogBox
        .Filters.Add "CSV", "*.CSV", 1
        .AllowMultiSelect = False
        If .Show = True Then
            selectedFile = .SelectedItems(1)
        End If
    End With

    If selectedFile = "" Then Exit Sub

    ' 以UTF-8编码打开CSV文件
    Dim wbCSV As Workbook
    Set wbCSV = Workbooks.Open(Filename:=selectedFile, _
                               Format:=6, ' 对应分号分隔的CSV格式
                               Delimiter:=";", _
                               Local:=False, _
                               Origin:=65001) ' 65001是UTF-8的编码标识

    ' 将CSV数据复制到目标区域
    wbCSV.Sheets(1).UsedRange.Copy ThisWorkbook.Range("ImportRange").Cells(1, 1)

    ' 关闭CSV文件,不保存修改
    wbCSV.Close SaveChanges:=False
    Set wbCSV = Nothing
End Sub

注意事项

  • 方法一中使用的ADODB.Stream组件是Windows系统自带的,无需额外安装。
  • 方法二中,Format:=6对应分号分隔的CSV,如果你的CSV是逗号分隔,将参数改为Format:=2即可。
  • 两种方法都保留了原代码的文件选择逻辑,同时修复了编码问题,且避免了原代码中固定列数可能导致的数组越界错误。

内容的提问来源于stack exchange,提问作者Aristote Masamaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:45:13