2015-06-20 83 views
1

我無法弄清楚爲什麼我的腳本沒有讀取和存儲CSV文件的第一行。由於某種原因,它從第二行開始。無法讀取CSV文件的第一行

我有以下代碼(從2列CSV文件讀取):

Set rs = CreateObject("ADOR.Recordset") 

'this just gets the folder where the csv file lives 
sDir = GetiMacrosFolder("DataSources") 

strConnect = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _ 
      "DefaultDir=" & sDir & ";" 

rs.Open "select * from test.csv", strConnect 

count = 0 

Do Until rs.EOR 
    ReDim Preserve var1(count) 
    var1(count) = rs.fields(0) 

    ReDim Preserve var2(count) 
    var2(count) = rs.fields(1) 

    count = count + 1 
    rs.MoveNext 
Loop 

rs.Close 

如果我那麼做了MsgBox(var1(1)),它讓我在3行的值,而不是排2像它應該。

+0

@AnsgarWichers答案是正確的 - 如果文件沒有標題,則可以使用Jet驅動程序。請參閱[這些](https://www.connectionstrings.com/textfile/)示例連接字符串。 – Comintern

+0

使用Jet'HDR = Yes;',請參閱@Comintern鏈接。 – omegastripes

+2

@omegastripes你的意思是'HDR =否;'。 –

回答

3

Recordset對象將CSV的第一行作爲表格標題讀取,因此第二行是第一行數據。您可以使用,你可以指示司機不這樣做避免這種情況是:

strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & _ 
      ";Extended Properties=""text;HDR=No;FMT=Delimited"";"

,或者通過將schema.ini這樣旁邊的CSV:

[test.csv] 
Format=CSVDelimited 
ColNameHeader=False 
MaxScanRows=0 
CharacterSet=ANSI 

注意CSVDelimited只能當您的文件實際上是用逗號分隔的,您的逗號定義爲系統區域設置中的字段分隔符。否則,您需要在該文件中指定您的分隔符:

[test.csv] 
Format=Delimited(<delimiter>) 
ColNameHeader=False 
MaxScanRows=0 
CharacterSet=ANSI
+0

非常感謝所有的信息和例子!我會試試這個。 –

+0

那麼,我實際上會接受你的答案,因爲它只是「Recordset對象讀取表頭的第一行的第一句話,所以第二行是第一行數據。」真的,這回答了我的問題。我想知道爲什麼我的代碼從第2行讀取,並告訴我爲什麼(由其他人的評論支持)。這就是我接受答案的原因。剩下的只是你提供給我的額外幫助。我會嘗試一下並報告。 –

+0

剛剛嘗試了您的新連接字符串建議。工作完美!再次感謝。 –