ADO文本文件查询 - 以逗号分隔的结果

时间:2016-06-07 08:36:23

标签: vba excel-vba ado excel

我正在使用ADO查询文本文件以将数据导入Excel。

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & filePath & ";" & _
        "Extended Properties='text';"

rs.Open "SELECT * FROM " & fileName, cn

wsImport.Range("A1").CopyFromRecordset rs

我面临的问题是查询结果被分割,逗号作为分隔符。这意味着当我将数据写入工作表时,它将在多个列中输出。

我已经确认它在查询阶段被拆分,而不是将数据写入工作表阶段。当我希望在创建的记录集的第一个字段内可以访问所有数据时,我必须使用rs.Fields(0)rs.Fields(1)来访问某些数据行(允许将数据写入A列)工作表)。

任何人都可以澄清我如何查询文本文件,而不是通过任何分隔符拆分数据?

我也尝试在扩展属性中使用以下内容。

Extended Properties='text;HDR=Yes;FMT=Delimited';

Extended Properties='text;HDR=Yes;FMT=FixedLength';

2 个答案:

答案 0 :(得分:2)

以下是阅读文本文件的简单示例:

Sub foo(filePath As String)
    Dim sDataIn                     As String
    Dim sDataTemp()                 As String
    Dim sDataOut()                  As String
    Dim n                           As Long

    Open filePath For Binary As #1
    sDataIn = Space$(LOF(1))
    Get #1, , sDataIn
    Close #1
    sDataTemp() = Split(sDataIn, vbNewLine)
    ReDim sDataOut(1 To UBound(sDataTemp) + 1, 1 To 1)
    For n = LBound(sDataTemp) To UBound(sDataTemp)
        sDataOut(n + 1, 1) = sDataTemp(n)
    Next n
    ActiveSheet.Range("A1").Resize(UBound(sDataOut), 1) = sDataOut
End Sub

答案 1 :(得分:0)

如果您打开宏录制器并让它记录您执行一次导入文件的所有步骤,您应该得到答案。

我只是试了一下并得到了它。

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+s
'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\your_path_here\test.txt", Destination:=Range("$A$1"))
        .CommandType = 0
        .Name = "test"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub