无法读取 CSV 文件的第一行

Can't read first row of CSV file

我不明白为什么我的脚本没有读取和存储 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 行中的值。

Recordsetobject将CSV的第一行读取为tableheaders,所以第二行是第一行数据。您可以通过使用可以指示不要这样做的 driver 来避免这种情况:

strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & _
             ";扩展属性=""text;<b>HDR=No</b>;FMT=Delimited"";""

或者在 CSV 旁边放置一个像这样的 schema.ini

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

请注意,CSVDelimited 仅在您的文件实际上是 comma-separated 您在系统区域设置中将逗号定义为字段分隔符时才有效.否则,您需要在该文件中指定分隔符:

[test.csv]
格式=<b>Delimited(<i><delimiter></i>)</b>
ColNameHeader=假
MaxScanRows=0
字符集=ANSI