我使用ADODB.Connection和ADODB.Recordset从csv文件获取数据。我面临的问题是,在分号(或逗号以外)的情况下,定界符似乎不起作用。我正在使用分号作为分隔符。这是我的代码:
Public Function getDataFromFile(path As String, filename As String) As ADODB.Recordset
Dim cN As ADODB.Connection
Dim RS As ADODB.Recordset
Set cN = New ADODB.Connection
Set RS = New ADODB.Recordset
cN.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";" & _
"Extended Properties=""text;HDR=NO;FMT=Delimited(;);IMEX=1;""")
RS.ActiveConnection = cN
RS.Source = "select * from " & filename
Set getDataFromUrl = RS
End Function
当我将所有分号替换为csv文件中的逗号时,一切正常(即使使用“ FMT = Delimited(;)”,相同的代码)。但是,不能使用分号作为分隔符。
答案 0 :(得分:0)
据我所知,您必须使用文件"Schema.ini"
,该文件必须与该文件存在于同一文件夹中。而且,更糟的是,它需要包含文件名。我制作了两个示例文件,一个用分号分隔,一个使用Tab键:
[textfileWithSemicolon.csv]
ColNameHeader=True
Format=Delimited(;)
[textfileWithTAB.csv]
ColNameHeader=True
Format=TabDelimited
当例程获取路径和文件作为参数时,最简单的方法可能是将文件复制到具有固定名称的固定文件夹,然后将Schema.ini
文件放在该文件夹中。
一种替代方法是动态创建Schema.ini
,但这需要您对传递的文件夹具有写权限(并且没有其他人同时在该文件夹上执行相同的操作... )
有关Schema.ini
的更多信息,请查看Microsoft Docs
(似乎还有一种方法可以更改注册表中的默认定界符,但我认为这不是一个好的解决方案)