如何避免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
相关产品推荐
相关产品推荐

