2015-02-09 162 views
1

我有一个运行于Excel 2010的大型宏程序,它将大量数据格式化为另一个表格并将工作簿导出为CSV文件(通过大量数据表示数千行,多达59,000行)。最近,我的文件已经开始在最后像这样用逗号分隔的一个额外的行结束了:Excel将额外逗号导出为CSV

data,data,data,data,number,date 
data,data,data,data,number,date 
,,,,, 

我使用一个存储过程导出这些文件到一个SQL数据库,因此确保有没有多余的逗号与程序螺丝是必不可少的。所以,就这样说,发生了什么,我该如何预防呢?我可以提供您认为缺失的任何代码或信息。

注意:它似乎只发生在至少有数千行数据的文件上。一个导出的文件通常有2000多个,另一个文件必须有59,000+个表才能导出。

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 
+1

很有可能你有一个空白的单元格或在最后一行数据后面使用过的东西。我可以在一个有少量数据行的小电子表格中复制这些数据,然后向下游动两行,然后点击“ + ”(即空白单元格)。然后导出csv - 中提琴,额外的昏迷。可能是别的东西,但是,你可能会首先确保数据下面的任何内容都被删除。 (即删除行或其他)。 – Ditto 2015-02-09 15:06:38

+0

我会再次运行程序,看看是否是这种情况。我应该在10分钟内更新。感谢您的建议,@Ditto – jaysoncopes 2015-02-09 15:09:09

+0

@我停止了该程序,以便有机会体验您所描述的内容,但如果您的标准存在“空单元格”,我将能够去直至配方栏并突出显示该单元格中的空间。我输出的最后一行没有空格。我会在导出之前尝试清除最后一行,尽管我不确定它有多大帮助。 – jaysoncopes 2015-02-09 15:43:19

回答

1

点击按Ctrl + 结束看什么的Excel认为是的程度你的数据。如果超出了您想要导出的范围,请使用主页►编辑►清除►全部清除以从下面的行中擦除所有值和格式,并将所需数据区域的右边的列擦除并保存工作簿。 Excel 2010(带有所有SP)将调整为CurrentRegion并且Ctrl + 结束现在应带您到正确的最后一个单元格

早期版本的Excel(或不带有所有SP的XL2010)可能需要执行其他步骤(请参阅Unwanted extra blank pages in Excel)。

+0

为了将来的参考:通过在'Range(“A1”)。End(xlDown)''后面的一行的'.EntireRow'上使用'.Clear'命令来完成VBA代码。 – jaysoncopes 2015-02-09 17:34:45