如何在VBA中使用@作为分隔符导入csv文件

mar*_*rcw 5 csv excel vba adodb

我正在尝试使用ADODB在带有VBA的Excel中从csv文件加载数据。
我有一个函数返回一个Connection对象。

Private Function OpenConnection(dataSource As String) As ADODB.Connection
    Set OpenConnection = CreateObject("ADODB.Connection")

    With OpenConnection
        .ConnectionTimeout = 5
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dataSource & ";" & _
            "Extended Properties=""Text;HDR=YES;FMT=Delimited(,)"";Persist Security Info=False"

        Debug.Print "trying to connect: " & .ConnectionString
        .Open
    End With
End Function
Run Code Online (Sandbox Code Playgroud)

然后我只打印数据。

Public Sub Test_Import()
    Dim conn As ADODB.connection, records As ADODB.Recordset

    Set connection = OpenConnection(foldername)
    Set records = connection.Execute("Select * from data.txt")

    Debug.Print records.Fields(0)
End Sub
Run Code Online (Sandbox Code Playgroud)

如果我使用逗号,它可以正常工作,但最后我将不得不使用由'@'符号分隔的文件,由于缺少写权限,我无法将其转换为使用'
不幸的是,在其他地方复制和更改文件也不是一种选择。

现在,我在函数中更改FMT=Delimited(,)FMT=Delimited(@)OpenConnection而不是返回第一列值a1,而是返回整行a1@b1@c1

“@”不支持作为一个分界字符串?还是我错过了什么?

mar*_*rcw 5

感谢@SiddharthRout提供的解决方案以及Windows开发人员中心的线程链接。

问题是,在连接字符串中不能设置分隔字符串,而只能指定使用特定字符分隔文件。FMT=Delimited(@)FMT=Delimited或相同FMT=Delimited(,)

我必须在包含csv文件(data.txt)的文件夹中创建一个文件schema.ini,我必须在其中输入:

[data.txt]
Format = Delimited(@)
Run Code Online (Sandbox Code Playgroud)

将解析schema.ini文件,并正确读取定界符,并且一切正常(只要我不更改任何文件名)

我还在msdn上找到了另一个来源,来源解释了如何设置定界字符串(使用注册表或提到的schema.ini),还包括Tabstop和固定长度分隔的文件。