2011-08-16 22 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