【问题标题】:VBA, Import CSV split by ";" to sheetVBA,导入由“;”分割的CSV到表
【发布时间】:2017-12-06 09:38:35
【问题描述】:

我正在尝试导入以分号“;”分隔的 CSV 文件放入一个 excel 对象中,以便我以后可以使用它。

理想情况下,我想使用 ADO、DAO 或 ADODB,这样我还可以在对象上运行 SQL 查询,并获取特定字段的总和,或字段总数等。

到目前为止,我已经得到了下面的代码,但它没有用“;”分割数据,所以它全部返回为 1 个字段,而不是可以处理的多个字段。

Sub Import()
   Dim conn As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim f As ADODB.Field

   Dim csvName, csvPath

    csvPath = ActiveWorkbook.path
    csvName = "fileName.csv"

   conn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & csvPath & ";"
   rs.Open "SELECT * FROM " & csvName, conn, adOpenStatic, adLockReadOnly, adCmdText

   Debug.Print rs.Fields

   While Not rs.EOF
      For Each f In rs.Fields
         Debug.Print f.Name & "=" & f.Value
      Next
   Wend
End Sub

谁能告诉我如何用“;”分割数据并使用 SQL 查询对其进行查询?或者我可以加载 CSV 并查询某些列的其他对象。

【问题讨论】:

  • 如果是关于Excel的,请标记一下
  • 我想你会在这里得到所有答案:stackoverflow.com/a/11267603/78522
  • @DumitruDaniel 首先,抽出时间来感谢您之前在此处发布的帖子。到目前为止,您已给出 0 条反馈。
  • 16 个问题并且没有接受的答案,所以我想我们可以假设您这次也不会努力接受任何答案。
  • 嗨@Patrick Honorez,谢谢,但我需要将数据加载到对象中,而不仅仅是将其复制到我的工作表中。

标签: vba excel csv


【解决方案1】:

这是一个例子:

Public Sub QueryTextFile()

    Dim rsData As ADODB.Recordset
    Dim sConnect As String
    Dim sSQL As String

    ' Create the connection string.
    sConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
               "Data Source=C:\Files\;" & _
               "Extended Properties=Text;"

    ' Create the SQL statement.
    sSQL = "SELECT * FROM Sales.csv;"
    Set rsData = New ADODB.Recordset
    rsData.Open sSQL, sConnect, adOpenForwardOnly, _
                adLockReadOnly, adCmdText

    ' Check to make sure we received data.
    If Not rsData.EOF Then
        ' Dump the returned data onto Sheet1.
        Sheet1.Range("A1").CopyFromRecordset rsData
    Else
        MsgBox "No records returned.", vbCritical
    End If

    ' Clean up our Recordset object.
    rsData.Close
    Set rsData = Nothing

End Sub

【讨论】:

  • 您好 Johny,感谢您的回复,但它没有正确拆分数据。请记住,我的 CSV 文件是用“;”分割的
  • 请参阅this 和this 了解分隔符参数。
【解决方案2】:

我发现唯一可用的答案是在当前文件夹中创建一个ini文件,并在ini文件中输入分隔符。

iniPath = activeworkbook.path & "\"
iniName = "schema.ini"
iniPathName = iniPath & iniName
If Not fso.FileExists(iniPathName) Then
    fso.CreateTextFile (iniPathName)
End if

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 2021-02-16
    • 2014-04-08
    • 2016-03-21
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多