CSV文件中的空列输出不一致(Microsoft Excel)
当使用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。