VBA将CSV文件以特定列格式保存到Excel

我相当肯定这是一个简单的请求,但我通常不使用任何VBA脚本,所以这是超出我的知识。

我有一个大约700个.csv文件的文件夹是“|” 基本上所有我想要做的就是打开这个特定的文件夹,并将所有.csv文件转换为.xls,并使所有列格式化为“文本”,而不是“一般”。 我做了一些search,并find确切的代码来转换文件,但我不知道如何也使列文本。 任何帮助将不胜感激! 我试过看,但如果答案是其他地方,请指出我在正确的方向。 (下面是.csv到.xls的代码)

Sub CSVtoXls() Dim CSVfolder As String Dim XlsFolder As String Dim fname As String Dim wBook As Workbook CSVfolder = "C:\Users\del44\Desktop\CSV Files\" XlsFolder = "C:\Users\del44\Desktop\Excel Files\" fname = Dir(CSVfolder & "*.csv") Do While fname <> "" Set wBook = Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:="|") wBook.SaveAs XlsFolder & Replace(fname, ".csv", ".xls") wBook.Close False fname = Dir Loop Dim rCell As Range 

重写。 testing看看现在是否可行。

 Sub CSVtoXls() Dim CSVfolder As String Dim XlsFolder As String Dim fname As String Dim LnLastRow As Long Dim StString As String Dim StSplit() As String Dim wBook As Workbook CSVfolder = "C:\Users\del44\Desktop\CSV Files\" XlsFolder = "C:\Users\del44\Desktop\Excel Files\" fname = Dir(CSVfolder & "*.csv") Do While fname <> "" Set wBook = Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:="|") LnLastRow = wBook.Sheets(1).Range("A1").End(xlDown).Row For i = 1 To LnLastRow StString = wBook.Sheets(1).Cells(i, 1) StSplit() = Split(Mid(StString, 1), "|") For j = LBound(StSplit) To UBound(StSplit) wBook.Sheets(1).Cells(i, (j + 1)) = "'" & StSplit(j) Next j Next i wBook.SaveAs XlsFolder & Replace(fname, ".csv", ".xls"), FileFormat:=56 wBook.Close False fname = Dir Loop Dim rCell As Range End Sub 

我已经退出选项“.textcolumns”,而是分裂每个细胞。 看看这是否有帮助!

CSV转换可以是一个痛苦的屁股!

不过,我用一个简单的CSV文件testing了你的情况

 Scott|00001234|test Mark|10101010|test Brian|01010201|test 

下面的代码为我工作。 (我结束了从原始代码到插入代码的格式化单元格的行。)

 Set wBook = Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:="|") wBook.Sheets(1).Columns(1).TextToColumns _ Destination:=Range("A1"), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, _ Semicolon:=False, _ Comma:=False, _ Space:=False, _ Other:=True, _ OtherChar:="|", _ '*** this is the key! **** FieldInfo:=Array(Array(1, 1), Array(2, 2), Array(3, 1)), _ TrailingMinusNumbers:=True wBook.SaveAs XlsFolder & Replace(fname, ".csv", ".xls") 

这个工作的关键是FieldInfo参数。 我会解释它在做什么,因为它会要求你调整它以适应你的数据。

  • Array保存的元素等于文件中的分隔列数(在我的情况下有三个)。
  • 每个元素都是一个Array本身
  • Array(1,1)表示格式化为General的第一列
  • Array(2,2)意味着第二列被格式化为Text
  • Array(3,1)表示第三列被格式化为General

有关更多的理解,请参阅手动Convert Text to Columns Wizard时,将文本Convert Text to Columns Wizard中的步骤3。