我正在尝试使用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
然后我只打印数据。
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
如果我使用逗号它可以正常工作但最后我将不得不使用由'@'符号分隔的文件,而我无法使用'转换为<,> < / strong>因为缺少写入权限 遗憾的是,在其他地方复制和更改文件也不是一种选择。
现在我在FMT=Delimited(,)
函数中将FMT=Delimited(@)
更改为OpenConnection
,而不是返回第一列值a1
,而是返回整行a1@b1@c1
。
'@'不支持作为分隔字符串?或者我错过了什么?
答案 0 :(得分:4)
感谢@SiddharthRout提供解决方案以及指向a thread at windows dev center的链接。
问题是在连接字符串中,无法设置分隔字符串,只能指定使用特定字符分隔文件。 FMT=Delimited(@)
的处理方式与FMT=Delimited
或FMT=Delimited(,)
相同。
我必须在包含我必须输入的csv文件( data.txt )的文件夹中创建一个文件 schema.ini :
[data.txt]
Format = Delimited(@)
将解析schema.ini文件并正确读取分隔符,一切正常(只要我不更改任何文件名)。
我还发现another source at msdn解释了如何设置分隔字符串(使用注册表或提到的 schema.ini ),还包括Tabstops和固定长度分隔文件。
答案 1 :(得分:1)
@marcw-您真棒。 为了进一步帮助您-您不必手动创建此文件。 如果您使用的是Filedialog,则可能如下所示:
Set fldr = Application.FileDialog(msoFileDialogOpen)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False ' Select only 1 file
.InitialFileName = strPath ' File location
If .Show <> -1 Then Exit Sub ' Quit when user cancels
myFolder = .SelectedItems(1)
End With
'you can find below function on stackoverflow
strPath = Left(myFolder, Len(myFolder) - Len(GetFilenameFromPath(myFolder)) - 1) 'file path ended with \
nejm = GetFilenameFromPath(myFolder) 'file name
'this is the place which is creating that "ini" file
Open strPath & "\" & "schema.ini" For Output As #1
Print #1, "[" & nejm & "]" & vbNewLine & "Format = Delimited(;)"
Close #1
完成所有过程后,您只需添加:
Kill strPath & "\" & "schema.ini"