【问题标题】:ADODB.Connection: delimiter semicolon does not work for csv text filesADODB.Connection:分隔符分号不适用于 csv 文本文件
【发布时间】:2019-01-27 16:22:24
【问题描述】:

我使用 ADODB.Connection 和 ADODB.Recordset 从 csv 文件中获取数据。我面临的问题是分隔符在分号(或逗号以外)的情况下似乎不起作用。我正在使用分号作为分隔符。这是我的代码:

Public Function getDataFromFile(path As String, filename As String) As ADODB.Recordset

    Dim cN As ADODB.Connection
    Dim RS As ADODB.Recordset

    Set cN = New ADODB.Connection
    Set RS = New ADODB.Recordset

    cN.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";" & _
             "Extended Properties=""text;HDR=NO;FMT=Delimited(;);IMEX=1;""")

    RS.ActiveConnection = cN
    RS.Source = "select * from " & filename
    Set getDataFromUrl = RS

End Function

当我将 csv 文件中的所有分号替换为逗号时,一切正常(相同的代码,即使使用“FMT=Delimited(;)”)。但它不适用于分号作为分隔符。

【问题讨论】:

    标签: vba csv connection delimiter adodb


    【解决方案1】:

    据我所知,您必须使用需要与该文件位于同一文件夹中的文件"Schema.ini"。而且,更糟糕的是,它需要在其中包含文件名。我做了两个示例文件,一个用分号分隔,一个用 Tab:

    [textfileWithSemicolon.csv]
    ColNameHeader=True
    Format=Delimited(;)
    
    [textfileWithTAB.csv]
    ColNameHeader=True
    Format=TabDelimited
    

    当您的例程获取路径和文件作为参数时,可能最简单的方法是将文件复制到具有固定名称的固定文件夹并将Schema.ini 文件放在那里。

    另一种方法是即时创建Schema.ini,但这需要您对传递的文件夹具有写权限(并且同一时刻没有其他人对该文件夹执行相同操作...)

    有关Schema.ini的更多信息,请查看Microsoft Docs

    (好像也有办法改变注册表中的默认分隔符,但我觉得这不是一个好的解决方案)

    【讨论】:

    • 哇,太好了。有用。谢谢。但是如何添加标题?我按照文档中的描述尝试了添加 ColNameHeader=True 但仍然没有出现标题。
    • (1) 在您的连接字符串中更改 HDR=YES。 (2) 你想在哪里添加标题?您是否将 Recordset 数据转储到带有 Range.CopyFromRecordset 的工作表中 - 这可能会有所帮助:stackoverflow.com/a/24283834/7599798
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2021-10-21
    • 2015-08-09
    相关资源
    最近更新 更多