hindersaliva
asked on
Excel VBA - Get data from a closed CSV. Headers?
I'm experimenting with code I have found here
https://stackoverflow.com/ questions/ 11635526/r eturn-csv- file-as-re cordset
It is supposed to get data from a CSV file, without opening it, and paste the data at "A1" on the activesheet. However, even though the connection specified that it has Headers (HDR=Yes) only some headers are coming through for me. The first row is row 1 of the data in the CSV.
Do I need to get the Headers separately? If so, how? (SEE UPDATE BELOW)
Thanks for any pointers.
https://stackoverflow.com/
It is supposed to get data from a CSV file, without opening it, and paste the data at "A1" on the activesheet. However, even though the connection specified that it has Headers (HDR=Yes) only some headers are coming through for me. The first row is row 1 of the data in the CSV.
Do I need to get the Headers separately? If so, how? (SEE UPDATE BELOW)
Thanks for any pointers.
Public Function getData(fileName As String) As ADODB.Recordset
Dim path As String
path = "C:\ExcelOMG Cookbook 2016\Closed CSV\"
Dim cN As ADODB.Connection
Dim RS As ADODB.Recordset
Set cN = New ADODB.Connection
Set RS = New ADODB.Recordset
' cN.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
' "Data Source=" & path & ";" & _
' "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
cN.Open ("Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & path & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
RS.ActiveConnection = cN
RS.Source = "select * from " & fileName
Set getData = RS
End Function
Sub GetDataFromCSV()
Dim a As ADODB.Recordset
Set a = getData("DataFile.csv")
a.Open
Range("A1").CopyFromRecordset a
a.Close
End Sub
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Can you post a sample of the CSV with dummy data?
ASKER
I tried it with the attached file Friends.csv. Curiously when I put 'Headers=Yes' I get no headers. When I put 'Headers=No' I do get headers.
Same result with JET and ACE.
Can someone explain what's happening here please?
Friends.csv
Same result with JET and ACE.
Can someone explain what's happening here please?
Friends.csv
ASKER
Norie, see my comment and attached file 'Friends.csv'
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Norie, I can see I would need a separate 'GetHeaders' procedure. But I DO get some of the Headers, but not all. That's the mystery.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Sorry it took so long to close this question.
ASKER
I changed the Provider to Provider=Microsoft.ACE.OLE
Now I get a row for the Headers but only some headers come through.
I'm going to dig into this a little more. See if the CSV file is odd.