2011-08-16 44 views
6

我有一個XLS文件在Excel 2003上創建一個帶有宏的CSV文件,我有40多列,最後3個是可選的,因此XLS上有很多空值,當我運行導出子程序時,它不會在所有行上放置尾隨逗號,爲什麼?因爲:http://support.microsoft.com/kb/77295 -.-Excel尾隨CSV文件中的逗號錯誤

在Microsoft Office Excel,如果保存一個文件中的文本或CSV(逗號分隔值)格式,Excel中把製表符或逗號工作表中的每一列之間。但是,某些文本文件可能以16行塊中的不同數量的製表符或逗號保存。

這裏是他們的建議的解決方法:

要確保Excel保存選項卡或逗號分隔符的所有空列,驗​​證該文件中的最後一列載有至少每16一些數據整個文件中的行。如果行塊不包含數據,則將每16行中的空格或其他字符添加到最後一列的單元格中,或者重新排列工作表中的列,以便工作表上的最後一列始終包含信息。

-.- way to go microsoft! -.-

好吧,所以我的主要問題是生成的文件將被另一個程序解析出我的範圍,需要特定的格式,因爲它現在我每隔16行添加一個空白,如果該字段是空,這似乎做到了,但數據處理部正在抱怨這個空白空間......你能相信它們嗎?

反正我也嘗試添加一個標誌,並用查找功能將其刪除,但OFC保存時會帶走再次分隔符的文件...

感謝您閱讀我的歷史,P

有什麼建議嗎?

編輯:不幸的是,使用Excel是必須的,數據是由不同用戶通過excel表格手動輸入的,vba代碼更像模板生成等。這是我唯一遇到的問題。改變整個過程是不可行的。

+0

手動循環細胞和使用VBA輸出CSV? –

+0

這就是我目前正在做的.. – isJustMe

+1

如果您使用vba手動迭代單元格並在緩衝區中構建CSV並將其寫入磁盤,那麼該知識庫文章將不適用,因爲它與內置的CSV創建? –

回答

5

手動示例;

Dim r As Range: Set r = Range("A1:C10") '// or ActiveSheet.UsedRange for everything 
Dim buffer As String, delimiter As String, c As Range 
Dim i As Long 

For Each c In r 
    If (i Mod r.Columns.Count) = 0 Then 
     If (Len(buffer)) Then delimiter = vbCrLf 
    Else 
     delimiter = "," 
    End If 
    buffer = buffer & delimiter & """" & CStr(c.Value) & """" '//or c.text to preserve formatting 
    i = (i + 1) 
Next 

Open "c:\xxx.csv" For Output As #1 
    Print #1, buffer 
Close #1 
+0

完美!正是我需要的! – isJustMe

+0

嘿亞歷克斯,我希望你能幫助我在這一個:http://stackoverflow.com/questions/8605804/this-custom-validation-is-not-working-buti-dont-know-whats-happenning謝謝! – isJustMe

0

建議1)停止使用Excel生成CSV文件。

什麼是您的數據源? Excel從哪裏獲取數據?也許你可以用原始數據源做一些事情來生成一個CSV文件,而不是使用Excel作爲中間人。如果你喜歡真正的大錘子,Biztalk是數據輸入/輸出操作的終極MS工具。很少有人能夠從他們的工具箱中提取出一個,但是可以在幾個小時內將一個定製的c#程序生成一個CSV文件。

總之:如果可能,請使用更好的工具!

0

如果您的數據中沒有逗號,那麼編寫一個文本閱讀器可以很容易地完成並計算一行中的列數,如果沒有足夠的空間,只需添加逗號即可。這並不理想,但它可能比編寫自定義Excel到CSV轉換器更簡單。

+0

感謝您的建議!我確實有很多逗號,其中一些字段是描述字段,其他字段是零售成本..等,, – isJustMe

0

最簡單的方法:

ActiveWorkbook.SaveAs "MyFileNameAndDir.csv", xlCSV, Local:=True