当使用Excel创建CSV文件时,Mark注意到了一件奇怪的事:这些文件在输出数据中每一行的结尾方式上并不总是一致的。当他创建一个可能包含70个字段(列)数据的CSV文件,然后在文本编辑器中查看该CSV文件时,他注意到所有记录都包含回车符,但位置不同。有些记录的逗号表示空白字段,然后在“正确的”位置终止。其他的在最后一个填充列之后结束;有些有一些逗号,但不足以容纳所有空白字段。马克想知道为什么会这样,以及他如何才能使CSV文件包含一致数量的输出字段。

解决该问题的一种相对简单的方法是,在将数据另存为CSV之前,在数据中包含一个完全填充的“虚拟”字段。例如,如果表中有70列,则在单元格A71中输入一个句点。向下复制此单元格的内容,直到表中有尽可能多的行。然后,当您将工作表导出为CSV时,Excel将包括虚拟字段,但更重要的是,将在每个记录的最后一个字段之前包括适当数量的字段定界符(逗号)。

如果您不想使用虚拟字段,则可以尝试以下操作:

。选择标题行中的单元格之一。

。按Shift + Ctrl + 8。整个数据表被选中。

。按Ctrl + H以显示“查找和替换”对话框的“替换”选项卡。 (请参见图1。)

。确保“查找内容”框完全为空。

。在“替换为”框中,输入一个空格。

。单击全部替换。 Excel应告知您完成了多少次替换。

这些步骤将所有空单元格替换为包含单个空格的单元格。然后,您可以导出为CSV,并且将为每行导出适当数量的字段。

最后,如果您通常将大型表导出为CSV格式,则可能希望创建一个宏来为您创建文件。以下只是您可以使用的宏类型的一个示例:

Sub CreateCSV()

Dim wkb As Workbook     Dim wks As Worksheet     Dim wksOri As Worksheet     Dim iCols As Integer     Dim lRow As Long     Dim iCol As Integer     Dim lRows As Long     Dim sFilename As String

Application.ScreenUpdating = False     sFilename = "C:\test.csv"

Set wksOri = ActiveSheet     iCols = wksOri.Cells. _         SpecialCells(xlCellTypeLastCell).Column     lRows = wksOri.Cells. _         SpecialCells(xlCellTypeLastCell).Row

Set wkb = Workbooks.Add     Set wks = wkb.Worksheets(1)



For lRow = 1 To lRows         For iCol = 1 To iCols             With wks.Cells(lRow, 1)

If iCol = 1 Then                     .Value = wksOri.Cells(lRow, iCol).Text                 Else                     .Value = .Value & "," & _                         wksOri.Cells(lRow, iCol).Text                 End If             End With         Next     Next

Application.DisplayAlerts = False     wkb.SaveAs FileName:=sFilename, _         FileFormat:=xlCSV     wkb.Close     Application.DisplayAlerts = True     wksOri.Parent.Activate     Application.ScreenUpdating = True     MsgBox sFilename & " saved"



Set wks = Nothing     Set wkb = Nothing     Set wksOri = Nothing End Sub

宏将创建一个全新的工作簿,然后将原始工作表中的信息“编译”到工作簿的第一个工作表的A列中。然后,该数据将包含原始数据中每个字段的定界符,然后另存为CSV文件。最后,临时工作簿被删除。

CSV的路径和文件名被硬编码到代码(sFileName变量)中,尽管可以对其进行修改以使代码根据需要提供文件名。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3068)适用于Microsoft Excel 97、2000、2002和2003。