2016-12-06 14 views
0

我有一些file.csv。如果我通過雙擊打開它,它將在Excel中以正確的設置打開(沒有分號,每個「行」數據正確顯示在預期的列中)。使用VBA打開CSV作爲工作表 - 不正確的解析

結果舉例:

enter image description here

然而,在VBA:

'Workbooks.OpenText Filename:=f, StartRow:=2, DataType:=xlDelimited, Semicolon:=True, ConsecutiveDelimiter:=True, TextQualifier:=xlTextQualifierNone 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited, Semicolon:=True 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited 
'Workbooks.Open Filename:=f, Format:=xlDelimited, Delimiter:=Chr(34) 
'Workbooks.Open Filename:=f, Format:=xlDelimited, Delimiter:=";" 
Workbooks.Open Filename:=f, Format:=xlDelimited 
Dim s As String 
s = """" & ";" & """" 
Workbooks.Open Filename:=f, Format:=xlDelimited, Delimiter:=s 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited, OtherChar:=s 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited, OtherChar:=";" 

我已經嘗試了上述行(以及其他一些人之前,我開始將我所有的嘗試)作爲以及根本沒有任何爭論,但無論我做什麼,該文件將打開,而不會像在我雙擊該文件時那樣分割文本。

實施例的結果:

enter image description here

因此,在總結;雙擊文件正確解析文件,OpenOpenText不會。令人驚訝的是,無論使用Open還是OpenText,工作表看起來都是相同的。

this question中描述了類似的問題,雖然它仍然沒有正確的答案。我們的情況之間的區別是,Excel不會爲我解析任何東西,看起來它似乎解析了OP的大部分文件。

我只想打開工作簿並遍歷其中一列,然後關閉它。我有幾個解決方法,所以我將能夠解決它不必要的迂迴或其他方式。

到目前爲止,我已經找到了這些想法:

  1. 重命名.csv.txt和使用OpenText
  2. 使用QueryTable進口
  3. 遍歷borked文件,因爲它出現使用OpenText和使用LEFT/MID/RIGHT以獲得期望的列
  4. 二進制OpenSplit每一行到一個數組

期望答案:

  1. 如何實現使用Workbooks.OpenText或類似機函數該溶液中。
  2. 關於爲什麼Workbooks.OpenText和/或最合適的本機函數類似於它的解釋(甚至可能是想法)在Excel本身似乎無法達到期望的結果時無法實現。
  3. 其他解決方法。

回答

1

感謝@GarysStudent對無意中翻倒我離開來的一個屬性我沒有足夠聰明,可以嘗試。他們說「給.csv擴展分配特殊含義」。

原來,本地化影響.csv上下文中的這個「特殊含義」。我正在使用Excel的本地化版本,並且設置Local:=True使OpenOpenText都能正確解析文件,即使沒有指定;作爲分隔符。

3

如果你要使用VBA要導入的文件,只需要使用VBA來解析記錄:

Sub ImportFile() 
    Dim j As Long, k As Long 
    Close #1 
    Open "C:\TestFolder\whatever.csv" For Input As #1 
    j = 1 
    Do While Not EOF(1) 
      Line Input #1, TextLine 
      ary = Split(TextLine, ";") 
      k = 1 
      For Each a In ary 
       Cells(k, j) = a 
       k = k + 1 
      Next a 
      j = j + 1 
    Loop 
    Close #1 
End Sub 

這樣做,這樣從到的.csv擴展賦予特殊的含義停止VBA 。

一旦核心代碼工作,讓您滿意,您可以與其他功能,如雙引號封裝裝飾它,等

相關問題