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

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

这就是为什么我很沮丧地问这个问题。 我寻找答案。 Google没有帮助。 没有人要求这样的问题。

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

  • 用户名
  • 用户名
  • 名称
  • 联系电话
  • 电子邮件地址
  • 上次login

现在我有一个CSV文件(由我们的网站生成)与一些额外的头,我不需要。

我的CSV文件头和我的模板头是完全一样的。 问题是我想获得这些信息基于他们的列标题(CSV),将匹配模板的标题。

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

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

谢谢。

您可以使用ADODB.Connection查询csv文件。 如果你有超过65K的logging,那么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 

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

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

我也发现FilePathvariables是错误的。 我删除了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 

再次感谢你托马斯·因津纳。 你刚刚救了我的命。 🙂

对Excel示例数据进行上下

我将使用以下步骤logging导入文件的macros: 如何导入使用UTF-8字符编码的.csv文件 。 您应该可以轻松地自定义录制的macros以适应您的需求。

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

在这里输入图像描述