从VBA中的文本文件中提取信息

时间:2019-01-20 12:45:06

标签: excel vba project data-analysis

作为我在工作场所遇到的分析挑战的一部分,我目前正在尝试从文本文件中提取数据。文本文件是一堆数据,每行标题/条目均以逗号分隔。

我看了几个在线文本提取的例子,但是我得到的最大结果是在单个单元格中得到一行,然后Excel冻结。我将所有其他条件都放入条件后,其他所有对象都将冻结Excel。

我目前的尝试涉及以下内容:

Do Until EOF #1, textLine
Line Input #1, textLine

    Do Until Count = Len(text line) + 1
    Text = Text & Mid(textLine, Count, Count)
    If Right(text, 1) = "," Then
    textImport = Left(text, Count - 1)
    Cells(rowCount, column count) = textImport
    Text = ""
     columnCount = columnCount + 1
    Loop

    rowCount = rowCount + 1

Loop

谁能告诉我我要去哪里错了?由于挑战的性质和涉及的数据,我无法共享任何数据或文本文件。

2 个答案:

答案 0 :(得分:1)

查询表导入

您可以这样做:

Sub QueryImport()

    Const cSheet As Variant = "Sheet1"  ' Worksheet Name/Index
    Const cSource As String = "A1"      ' Source Range

    Dim vntFile As Variant  ' Source Array

    vntFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    If vntFile <> False Then
        With ThisWorkbook.Worksheets(cSheet).QueryTables _
                .Add(Connection:="TEXT;" & vntFile, _
                Destination:=ThisWorkbook.Worksheets(cSheet).Range(cSource))
            .Name = "Pets"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = xlWindows
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    End If
End Sub

将打开一个对话框,您可以在其中选择文件,然后将其导入Excel,然后您可以进一步操作该文件,由于缺少信息,该文件超出了范围。将结果的一部分发布到另一个问题中以获得所需的结果。

答案 1 :(得分:0)

如果这不是可以在Excel中打开的CSV,请尝试执行此操作。

Sub readCSVLikeFile()
    r = 1
    Open "<path of the file> For Input As #1
    While Not EOF(1)
        Line Input #1, txtline
        v = Split(txtline, ",")
        Range(Cells(r, 1), Cells(r, UBound(v) + 1)) = v
        r = r + 1
    Wend
    Close #1

End Sub