Excel VBA生成TXT文件后,如何去除文件中的空白行?
解决VBA生成TXT文件时末尾空白行的问题
问题根源
你代码中使用的Write #语句存在默认行为:写入内容后会自动添加换行符,再加上循环中反复打开、关闭文件的操作,最终导致生成的TXT出现多余空白行。同时这种逐次读写的方式效率也偏低。
解决方案1:替换写入语句并优化判断逻辑
直接将Write #替换为Print #,并增加对Data3非空的判断,避免写入空行:
Sub Creat_Txt_File() Dim mydir As String Dim r As Long Dim Data As String, Data3 As String Dim fileNum As Integer mydir = "d:\Test\" ' 目标目录不存在则创建,避免报错 If Dir(mydir, vbDirectory) = "" Then MkDir mydir End If For r = 2 To 900 Data = Cells(r, "A").Value Data3 = Cells(r, "D").Value ' 同时判断文件名和内容非空,避免无效写入 If Data <> "" And Data3 <> "" Then fileNum = FreeFile() Open mydir & Data & ".txt" For Append As #fileNum Print #fileNum, Data3 ' 用Print替代Write,无多余格式和换行 Close #fileNum End If Next r End Sub
解决方案2:批量收集内容后一次性写入(更高效)
如果同一文件名对应多行内容,用字典先收集所有内容,再一次性写入文件,减少IO操作次数:
Sub Creat_Txt_File_Efficient() Dim mydir As String Dim r As Long Dim Data As String, Data3 As String Dim contentDict As Object Set contentDict = CreateObject("Scripting.Dictionary") mydir = "d:\Test\" ' 确保目录存在 If Dir(mydir, vbDirectory) = "" Then MkDir mydir End If ' 遍历单元格收集内容 For r = 2 To 900 Data = Cells(r, "A").Value Data3 = Cells(r, "D").Value If Data <> "" And Data3 <> "" Then If contentDict.Exists(Data) Then contentDict(Data) = contentDict(Data) & vbCrLf & Data3 Else contentDict(Data) = Data3 End If End If Next r ' 批量写入所有文件 Dim key As Variant Dim fileNum As Integer For Each key In contentDict.Keys fileNum = FreeFile() Open mydir & key & ".txt" For Output As #fileNum Print #fileNum, contentDict(key) Close #fileNum Next key Set contentDict = Nothing End Sub
关键说明
Print #仅写入内容本身,不会像Write #那样自动添加引号或多余换行;- 增加
Data3 <> ""判断,彻底避免空内容写入导致的空白行; - 第二种方案通过字典聚合内容,大幅减少文件打开/关闭次数,运行效率更高。
内容的提问来源于stack exchange,提问作者Andre Nori
相关产品推荐
相关产品推荐

