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。
被“@”不支持作为一个分界字符串?还是我错过了什么?
感谢@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和固定长度分隔的文件。