使用VBA将CSV导入Excel匹配列标题

时间:2016-10-13 04:55:56

标签: excel vba csv header

我想询问是否可以使用宏(或VBA)将CSV文件导入到与我的模板列匹配的Excel文件中。

这就是为什么我对这个问题感到沮丧。我搜索了答案。谷歌没有帮助。没人问这类问题。

我有一个文件名“UserInfo.xlsx”,它有一个列标题:

  • UserID
  • 用户名
  • 名称
  • ContactNumber
  • EmailAddress的
  • LastLogin

现在我有一个CSV文件(由我们的网站生成),其中包含一些我不需要的多余标题。

我的CSV文件中的标题和我模板中的标题完全相同。问题是我希望根据与标题标题匹配的列标题(CSV)获取这些信息。

我怎样才能做到这一点?我将每天使用此模板,因为新用户正在注册我们的网站。所以我需要一个VBA代码。

我不知道从哪里开始,所以我在寻求你的帮助。

感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用ADODB.Connection查询csv文件。如果你有超过65K的记录,那么CopyFromRecordset可能无法工作,你必须使用ADODB.Recordset.GetRows来检索数据。

Sub Example()
On Error Resume Next
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Dim conn As Object, rs As Object
Dim Filename As String, FilePath As String

FilePath = "C:\"
Filename = "UserInfo.csv"

'Refernce: https://msdn.microsoft.com/en-us/library/ms974559.aspx
'Excel VBA Introduction Part 30 - ADO (ActiveX Data Objects) Querying a Database: https://www.youtube.com/watch?v=HE9CIbetNnI&index=33&list=PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
          "Data Source=" & FilePath & ";" & _
          "Extended Properties=""text;HDR=YES;FMT=Delimited"""

rs.Open "SELECT [UserID],[Username],[Name],[ContactNumber],[EmailAddress],[LastLogin] FROM [" & Filename & "]", _
        conn, adOpenStatic, adLockOptimistic, adCmdText

Worksheets("Sheet1").Range("A1").CopyFromRecordset rs

rs.Close
conn.Close
End Sub

答案 1 :(得分:1)

你的代码就像一个魅力!虽然我改变了一点,因为我使用的是Windows 10,我认为Microsoft.Jet.OLEDB.4.0不适用于我当前的Excel版本(2016)。

我将 Microsoft.Jet.OLEDB.4.0 更改为 Microsoft.ACE.OLEDB.12.0

我还发现FilePath变量是错误的。我删除了UserInfo.csv的文件名,当我尝试运行它时我很震惊。按预期工作。

由于我没有足够的积分来发布截图,我可以说你的代码真的和我的意思真的有效!

非常感谢你。

这是我的最终代码:

Sub Example()
On Error Resume Next
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Dim conn As Object, rs As Object
Dim Filename As String, FilePath As String

FilePath = "C:\" 'Just remove the filename and extension
Filename = "UserInfo.csv"

'Refernce: https://msdn.microsoft.com/en-us/library/ms974559.aspx
'Excel VBA Introduction Part 30 - ADO (ActiveX Data Objects) Querying a Database: https://www.youtube.com/watch?v=HE9CIbetNnI&index=33&list=PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
          "Data Source=" & FilePath & ";" & _
          "Extended Properties=""text;HDR=YES;FMT=Delimited""" 'Change the Provider

rs.Open "SELECT [UserID],[Username],[Name],[ContactNumber],[EmailAddress],[LastLogin] FROM [" & Filename & "]", _
        conn, adOpenStatic, adLockOptimistic, adCmdText

Worksheets("Sheet1").Range("A1").CopyFromRecordset rs

rs.Close
conn.Close
End Sub

再次非常感谢Thomas Inzina。你刚刚救了我的命。 :)

答案 2 :(得分:0)

here

我会使用以下步骤记录导入文件的宏:Contextures Excel Sample Data。您应该能够轻松自定义录制的宏以满足您的需求。

注意:导入CSV文件时,Excel允许您跳过列。

How to import a .csv file that uses UTF-8 character encoding