2017-07-03 91 views
0

我正在将CSV转换为Excel(xlsx)的宏中。问题是,虽然扩展名更改,但新转换后的文件保留为CSV文件的结构,我的意思是,不以列分隔。无法将CSV转换为Excel(XLSX)

myFile = Dir(myPath & "*.csv") 
Set wb = Workbooks.Open(myPath & myFile) 
wb.SaveAs myPath & Replace(myFile, ".csv", ""), xlOpenXMLWorkbook 
wb.Close False 

有什么问题吗?

谢谢!

+0

如果您在Excel中打开CSV文件,它是否将数据分成列? –

+0

嗨罗宾,是的,excel可以正常打开我的csv –

回答

0

您的文本文件包含一些Ansi编码的其他字符。 并且需要删除“=”,引用。这是分号是分号。 行分隔符是“;;;”三个分号(我的猜测)。

Sub openCsv() 
    Dim Wb As Workbook 
    Dim myPath As String, myFile As String 
    Dim newFile As String 
    Dim s As String 
    Dim vR(), vSplit, vSub 
    Dim n As Long, i As Long, j As Integer 

    myPath = ThisWorkbook.Path & "\" 'your path 
    myFile = "myTest.csv" 'your csv file 
    newFile = Split(myFile, ".")(0) & ".xlsx" 


    s = TransFromUtf_8(myPath & myFile) 
    s = Replace(s, "=", "") 
    s = Replace(s, Chr(34), "") 

    vSplit = Split(s, ";;;") 
    For i = 0 To UBound(vSplit) 
     n = n + 1 
     vSub = Split(vSplit(i), ";") 
     ReDim Preserve vR(1 To 30, 1 To n) 
     For j = 0 To UBound(vSub) 
      vR(j + 1, n) = vSub(j) 
     Next j 
    Next i 
    Set Wb = Workbooks.Add 
    With Wb 
     With .Sheets(1) 
      .Cells.NumberFormatLocal = "@" 
      .Range("a1").Resize(n, 30) = WorksheetFunction.Transpose(vR) 
      .Columns.AutoFit 

     End With 
     .SaveAs myPath & newFile 
     .Close (0) 
    End With 

End Sub 
Function TransFromUtf_8(myFile As String) 
    Dim objStream 
    Set objStream = CreateObject("ADODB.Stream") 
    With objStream 
     .Charset = "utf-8" 
     .Open 
     .LoadFromFile myFile 
     TransFromUtf_8 = .ReadText 
     .Close 
    End With 
    Set objStream = Nothing 

End Function 
+0

谢谢@ Dy.Lee,但那也不行。以下是CSV文件包含的内容(仅显示一行)。 “;”不是唯一的分隔符..希望这个帮助。 = “订阅”; “=” “345901005599418”, “”, “=”, “2017-05”, “”, “=”, “345901005599418”, “”, “=”“8934075100252227624 “”“;”=“”214074302328015“”“;”INACTIVE_NEW“;;;”36659331“;”00000“;”1“;”default1“;”Default Subscription Group“;”=“”UNKNOWN“”“; “0”;“Euro”;“No”;;;;“”;“”;“”;“”;;“ –

+0

@AlejandroHdez你可以描述你的文本文件和你想要的结果 –

+0

Yor文本没有被分割通过delimeter昏迷但是“;” –