2015-02-09 128 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