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

如何避免VBA将Excel保存为TXT文件时出现双引号重复问题?

问题原因

  • Excel内置的SaveAs文本格式导出功能,会自动对包含双引号、分隔符的单元格添加首尾双引号,同时将内部单引号转义为两个双引号,属于标准转义逻辑,不符合自定义导出需求。
  • 你之前使用的Write #语句本身内置了自动添加字符串引号、转义内部双引号的特性,所以导出时会额外增加引号。

解决方案

方案1:替换Write #为Print #逐行导出

Print #语句不会对输出内容做额外转义,会直接输出单元格原始值,示例代码如下:

Sub ExportWithoutQuotes()
    Dim txtFile As String
    Dim LR As Long
    Dim i As Long
    
    txtFile = "C:\TextSO.txt"
    ' 获取A列最后一行行号
    LR = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
    
    Open txtFile For Output As #1
    For i = 1 To LR
        ' 直接输出原始值,无额外引号
        Print #1, Range("A" & i).Value
    Next
    Close #1
End Sub

导出效果完全匹配单元格原始内容,你的示例会输出:

Cell with inverted coma (")
No Inverted coma

如果需要导出多列,自定义列分隔符(比如制表符),可以修改Print行内容:

' 示例:A、B、C列用制表符分隔
Print #1, Range("A" & i).Value & vbTab & Range("B" & i).Value & vbTab & Range("C" & i).Value

方案2:批量读取后一次性写入(适合大数据量)

如果行数较多,逐行写入效率较低,可以先把所有内容读入数组拼接后一次性写入:

Sub FastExportTxt()
    Dim txtFile As String
    Dim dataArr As Variant
    Dim outputStr As String
    Dim i As Long
    
    txtFile = "C:\TextSO.txt"
    ' 读取A列所有数据到数组
    dataArr = ActiveSheet.Range("A1:A" & ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row).Value
    
    For i = LBound(dataArr, 1) To UBound(dataArr, 1)
        outputStr = outputStr & dataArr(i, 1) & vbCrLf
    Next
    ' 移除末尾多余的换行
    outputStr = Left(outputStr, Len(outputStr) - 2)
    
    Open txtFile For Output As #1
    Print #1, outputStr
    Close #1
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:33:01