Excel 将额外的逗号导出到 CSV
Excel Exports Extra Commas to CSV
我有一个从 运行 到 Excel 2010 年的大型宏程序,在将大量数据格式化为另一个 table 并将工作簿导出为 CSV 文件(大量数据我的意思是数千行,最多超过 59,000 行)。最近,我的文件开始以多一行逗号结尾,如下所示:
data,data,data,data,number,date
data,data,data,data,number,date
,,,,,
我正在使用存储过程将这些文件导出到 SQL 数据库,因此确保没有多余的逗号会干扰程序是至关重要的。那么,话虽如此,发生了什么,我该如何预防呢?我可以提供您认为缺失的任何代码或信息。
注意:它似乎只发生在至少有几千行数据的文件上。导出的一个文件通常有 2,000+,另一个必须有 59,000+ 才能导出 table。
EDIT1:这是我正在使用的宏,以防万一它会有所帮助(同上要求)
Sub exportTable()
Dim varIsOpen As Boolean
Dim varSaveLocation1 As String, varSaveLocation2 As String
varIsOpen = False
If ThisWorkbook.Sheets("ControlSheet").Range("D2").value = "" Then
varSaveLocation1 = ThisWorkbook.Path & "\CSVREVIEW\"
varSaveLocation2 = varSaveLocation1 & Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now)
Else
varSaveLocation1 = ThisWorkbook.Sheets("ControlSheet").Range("D2").value
If Right(varSaveLocation1, 1) <> "\" Then varSaveLocation1 = varSaveLocation1 & "\"
varSaveLocation2 = varSaveLocation1 & Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now)
End If
For counter = 1 To Workbooks.Count
If Workbooks(counter).Name = "TableBook.xls" Then varIsOpen = True
If varIsOpen = True Then Exit For
Next
If varIsOpen = False Then GoTo isClosed
Workbooks("TableBook").Activate
Application.DisplayAlerts = False
'Check if TableBook is empty and don't export if so
If Workbooks("TableBook").Sheets("logFile").Range("A1").value = "" Then
Workbooks("TableBook").Close
GoTo isClosed
End If
'On Error Resume Next
If Len(Dir(varSaveLocation1, vbDirectory)) = 0 Then
MkDir varSaveLocation1
End If
If Len(Dir(varSaveLocation2, vbDirectory)) = 0 Then
MkDir varSaveLocation2
End If
'On Error GoTo 0
ActiveWorkbook.Sheets("test").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\test", xlCSV
ActiveWorkbook.Sheets("part").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\part", xlCSV
ActiveWorkbook.Sheets("logFile").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\logFile", xlCSV
ActiveWorkbook.Sheets("deltaLimits").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\deltaLimits", xlCSV
ActiveWorkbook.Close
Application.DisplayAlerts = True
isClosed:
End Sub
点击 Ctrl+End 以查看 Excel 认为您的数据范围。如果它超出了您想要导出的范围,请使用主页 ► 编辑 ► 清除 ► 全部清除以擦除所需数据区域下方行和列右侧的所有值和格式并保存工作簿。 Excel 2010(包含所有 SP)将调整到 CurrentRegion 并且 Ctrl+End 现在应该将您带到正确的 最后一个单元格.
早期版本的 Excel(或没有所有 SP 的 XL2010)可能需要额外的步骤(参见 Unwanted extra blank pages in Excel)。
我遇到了一个看起来相同的问题(csv 中有额外的逗号),结果我在循环中导出了一个额外的行,而我使用的单元格是空的,因此我只有逗号
我遇到了完全相同的问题。如果整个 sheet 被格式化,即使只是文本类型或文本高度,Excel 甚至会将空单元格检测为数据。您可以删除整个格式化的列/行,如上所述 。或者只是创建一个新的 sheet 而不格式化任何内容并复制您的代码或更改地址。
我有一个从 运行 到 Excel 2010 年的大型宏程序,在将大量数据格式化为另一个 table 并将工作簿导出为 CSV 文件(大量数据我的意思是数千行,最多超过 59,000 行)。最近,我的文件开始以多一行逗号结尾,如下所示:
data,data,data,data,number,date
data,data,data,data,number,date
,,,,,
我正在使用存储过程将这些文件导出到 SQL 数据库,因此确保没有多余的逗号会干扰程序是至关重要的。那么,话虽如此,发生了什么,我该如何预防呢?我可以提供您认为缺失的任何代码或信息。
注意:它似乎只发生在至少有几千行数据的文件上。导出的一个文件通常有 2,000+,另一个必须有 59,000+ 才能导出 table。
EDIT1:这是我正在使用的宏,以防万一它会有所帮助(同上要求)
Sub exportTable()
Dim varIsOpen As Boolean
Dim varSaveLocation1 As String, varSaveLocation2 As String
varIsOpen = False
If ThisWorkbook.Sheets("ControlSheet").Range("D2").value = "" Then
varSaveLocation1 = ThisWorkbook.Path & "\CSVREVIEW\"
varSaveLocation2 = varSaveLocation1 & Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now)
Else
varSaveLocation1 = ThisWorkbook.Sheets("ControlSheet").Range("D2").value
If Right(varSaveLocation1, 1) <> "\" Then varSaveLocation1 = varSaveLocation1 & "\"
varSaveLocation2 = varSaveLocation1 & Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now)
End If
For counter = 1 To Workbooks.Count
If Workbooks(counter).Name = "TableBook.xls" Then varIsOpen = True
If varIsOpen = True Then Exit For
Next
If varIsOpen = False Then GoTo isClosed
Workbooks("TableBook").Activate
Application.DisplayAlerts = False
'Check if TableBook is empty and don't export if so
If Workbooks("TableBook").Sheets("logFile").Range("A1").value = "" Then
Workbooks("TableBook").Close
GoTo isClosed
End If
'On Error Resume Next
If Len(Dir(varSaveLocation1, vbDirectory)) = 0 Then
MkDir varSaveLocation1
End If
If Len(Dir(varSaveLocation2, vbDirectory)) = 0 Then
MkDir varSaveLocation2
End If
'On Error GoTo 0
ActiveWorkbook.Sheets("test").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\test", xlCSV
ActiveWorkbook.Sheets("part").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\part", xlCSV
ActiveWorkbook.Sheets("logFile").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\logFile", xlCSV
ActiveWorkbook.Sheets("deltaLimits").Activate
ActiveWorkbook.SaveAs varSaveLocation2 + "\deltaLimits", xlCSV
ActiveWorkbook.Close
Application.DisplayAlerts = True
isClosed:
End Sub
点击 Ctrl+End 以查看 Excel 认为您的数据范围。如果它超出了您想要导出的范围,请使用主页 ► 编辑 ► 清除 ► 全部清除以擦除所需数据区域下方行和列右侧的所有值和格式并保存工作簿。 Excel 2010(包含所有 SP)将调整到 CurrentRegion 并且 Ctrl+End 现在应该将您带到正确的 最后一个单元格.
早期版本的 Excel(或没有所有 SP 的 XL2010)可能需要额外的步骤(参见 Unwanted extra blank pages in Excel)。
我遇到了一个看起来相同的问题(csv 中有额外的逗号),结果我在循环中导出了一个额外的行,而我使用的单元格是空的,因此我只有逗号
我遇到了完全相同的问题。如果整个 sheet 被格式化,即使只是文本类型或文本高度,Excel 甚至会将空单元格检测为数据。您可以删除整个格式化的列/行,如上所述