【发布时间】:2020-12-25 20:05:25
【问题描述】:
当您将工作表保存到 csv 时,如何删除 VBA 创建的最后一个空行?
Sub SaveAsCSV()
Dim strSourceSheet As String
Dim strFullname As String
strSourceSheet = "Sheet1"
strFullname = "\\H:\filepath\filepath1\"
myfilenamedate = Format(Range("C2"), "yyyyMMdd")
myfilenameindicator = "data"
ThisWorkbook.Sheets(strSourceSheet).Copy
ActiveWorkbook.SaveAs Filename:=strFullname & myfilenameindicator & myfilenamedate & ".csv", _
FileFormat:=xlCSV, _
CreateBackup:=True, _
local:=True
ActiveWorkbook.Close
End Sub
我已将代码更新为@FaneDuru 的规范,当此代码以这种方式表示时,它仍然返回错误。如果有人可以帮助它了解正在发生的事情,将不胜感激。我对 VBA 的理解非常有限。
Sub SaveAsCSV()
Function eliminateEmptyRow(fullName As String) As Boolean
'Necessary a reference to "Microsoft Script Control 1.0"
Dim fso As New FileSystemObject, txtStr As TextStream, objOutputFile As TextStream, strText As String
If Dir(fullName) <> "" Then 'check if file exists
Set txtStr = fso.OpenTextFile(fullName)
strText = txtStr.ReadAll
txtStr.Close
Else
eliminateEmptyRow = False: Exit Function
End If
strText = left(strText, Len(strText) - 2)
Set objOutputFile = fso.CreateTextFile(fullName)
objOutputFile.Write strText
objOutputFile.Close
eliminateEmptyRow = True
End Function
Dim strSourceSheet As String
Dim strFullname As String
strSourceSheet = "Sheet1"
strFullname = "\\H:\filepath\filepath1\"
myfilenamedate = Format(Range("C2"), "yyyyMMdd")
myfilenameindicator = "data"
ThisWorkbook.Sheets(strSourceSheet).Copy
ActiveWorkbook.SaveAs Filename:=strFullname & myfilenameindicator & myfilenamedate & ".csv", _
FileFormat:=xlCSV, _
CreateBackup:=True, _
local:=True
ActiveWorkbook.Close
If Not eliminateEmptyRow(strFullname & myfilenameindicator & myfilenamedate & ".csv") Then Stop
End Sub
【问题讨论】:
-
是什么让你觉得它增加了一行?当我从 Excel 中保存 CSV 文件时,存储的数据会从第一行数据在工作表上运行到最后一行数据在工作表上。 CSV 文件本身的最后一行以
EOL结尾。 -
CSV 的 行分隔符 是 \r\n,所以它自然会以 1 结尾。
-
@RonRosenfeld 我在记事本中打开文件,我可以看到末尾有一个空格。
-
记事本邀请您在最后一个 {CrLf} 之后添加数据。这并不意味着那里有东西。没有。当使用内置的另存为 CSV 功能创建最后一个 {CrLf} 时,无法抑制它。您可以编写自己的 CSV 文件导出器(比它的价值更麻烦,相信我 - 除非文件非常简单)。根据@FaneDuru 的回复,您可以在保存后操作文件 - 或者您可以调查为什么最终的 {CrLf} 会导致下游问题并在那里解决。
-
您看到的是实际空间吗?或者您是否在下一行的开头看到光标(这是预期的)?如果您看到的是实际空间,请检查您的工作表是否存在您认为是数据之后的空间。当我使用十六进制编辑器检查从 Excel 保存的 CSV 文件时,没有尾随空格或多余的行。
标签: excel vba csv export-to-csv