ADODB.Connection:分隔符分号不适用于csv文本文件

时间:2018-08-21 13:04:40

标签: vba csv connection delimiter adodb

我使用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(;)”,相同的代码)。但是,不能使用分号作为分隔符。

1 个答案:

答案 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

(似乎还有一种方法可以更改注册表中的默认定界符,但我认为这不是一个好的解决方案)