2017-07-03 120 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昏迷但是「;」 –