Excel VBA如何按行列循环导出内容生成逗号分隔的文本文件
VBA导出逗号分隔文本文件解决方案
问题原因
你现有代码的核心问题是Print #1语句每调用一次会默认在输出内容末尾追加换行符,所以每个单元格内容都会单独占一行,最终导致所有列数据都被堆叠到同一列中。
修正后代码
Sub Test_Open() Dim strFilePath As String Dim ws As Worksheet Dim rowContent As String ' 存储单行拼接后的内容 Dim row As Integer Dim column As Integer strFilePath = "C:\Users\test\text.txt" Workbooks.Open "C:\Users\test.xlsx" Set ws = ActiveWorkbook.Worksheets("test") Open strFilePath For Output As #1 row = 7 Do Until ws.Cells(row, 2).Value = "" rowContent = "" ' 每行开始前清空内容 For column = 1 To 86 ' 处理单元格内容:如果包含逗号/双引号/换行符,用双引号包裹内容,避免CSV格式错乱 Dim cellVal As String cellVal = ws.Cells(row, column).Value If InStr(cellVal, ",") > 0 Or InStr(cellVal, """") > 0 Or InStr(cellVal, vbCrLf) > 0 Then ' 内容里的双引号要转义为两个双引号 cellVal = """" & Replace(cellVal, """", """""") & """" End If ' 拼接列内容,第一列前面不加逗号 If column = 1 Then rowContent = cellVal Else rowContent = rowContent & "," & cellVal End If Next column ' 整行拼接完成后一次性输出,只加一次换行 Print #1, rowContent row = row + 1 Loop Close #1 ' 可选操作:关闭打开的源Excel文件,不保存修改 ActiveWorkbook.Close SaveChanges:=False End Sub
逻辑说明
- 每行遍历前先初始化空字符串
rowContent,将当前行所有列的内容按逗号分隔规则拼接到该字符串中 - 增加了CSV格式兼容处理:如果单元格内容本身包含逗号、双引号、换行符,会自动用双引号包裹内容,同时转义内容内的双引号,避免后续读取CSV时出现列错位
- 整行拼接完成后再调用一次
Print输出整行内容,保证每行对应Excel的一行数据,列之间用逗号分隔
内容的提问来源于stack exchange,提问作者Heisenberg
相关产品推荐
相关产品推荐

