Excel尾随csv文件中的逗号错误

时间:2011-08-16 13:34:14

标签: excel vba debugging csv

我有一个XLS文件在Excel 2003上创建一个带有宏的CSV文件,我有40多列,最后3列是可选的,因此当我运行导出子例程时,XLS上有很多空值它不会在所有行上放一个逗号,为什么?因为:http://support.microsoft.com/kb/77295 -.-

  

在Microsoft Office Excel中,如果以文本或CSV(逗号分隔值)格式保存文件,Excel会在工作表的每列之间添加制表符或逗号。但是,某些文本文件可能使用16行块中的不同数量的选项卡或逗号进行保存。

这是他们建议的工作:

  

要确保Excel为所有空列保存制表符或逗号分隔符,请验证文件中的最后一列是否包含整个文件中至少每16行的一些数据。如果行块不包含数据,请将每16行中的空格或其他字符添加到最后一列中的单元格,或者对工作表中的列重新排序,以便工作表上的最后一列始终包含信息。

-.-去微软的方式! -.-

好的,所以我的主要问题是生成的文件将被我的作用域中的另一个程序解析,这需要特定的格式,因为现在我正在每16行添加一个空白,如果该字段为空,这似乎要做到这一点,但数据处理部门正在抱怨这个空白......你能相信他们吗??

无论如何我还尝试添加一个标志并使用find函数删除它,但是当你保存文件时它会再次带走分隔符......

感谢您阅读我的历史; p

有什么建议吗?

编辑:不幸的是使用Excel是必须的,数据是由不同的用户通过excel表手动输入的,vba代码更像模板生成等。这是我唯一的问题,它是不可能改变整个过程。

4 个答案:

答案 0 :(得分:8)

手动示例;

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

答案 1 :(得分:0)

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

您的数据来源是什么? Excel从哪里获取数据?也许您可以使用原始数据源生成CSV而不是使用Excel作为中间人。如果你喜欢真正的大锤子,Biztalk是数据输入/输出操作的终极MS工具。很少有人可以从工具箱中取出那个,但是可以在几个小时内完成自定义c#程序以生成CSV文件。

简而言之:如果可能,请使用更好的工具!

答案 2 :(得分:0)

如果您的数据中没有逗号,那么编写一个经过的文本阅读器并计算一行中的列数就很容易,如果没有足够的话,只需在末尾添加逗号。它并不理想,但它可能比编写自定义Excel到CSV转换器更容易。

答案 3 :(得分:0)

最简单的方法:

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