我无法弄清楚为什么我的脚本没有读取和存储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 :(得分:3)
Recordset
对象读取CSV的第一行作为表头,因此第二行是第一行数据。您可以使用可以指示不执行此操作的驱动程序来避免这种情况:
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & _
";Extended Properties=""text;HDR=No;FMT=Delimited"";"
或在CSV旁边放置schema.ini
这样的内容:
[test.csv]
Format=CSVDelimited
ColNameHeader=False
MaxScanRows=0
CharacterSet=ANSI
请注意CSVDelimited
仅在您的文件实际上以逗号分隔而时才有效,您可以在系统的区域设置中将逗号定义为字段分隔符。否则,您需要在该文件中指定分隔符:
[test.csv]
Format=Delimited(<delimiter>)
ColNameHeader=False
MaxScanRows=0
CharacterSet=ANSI