【问题标题】:Copy specific lines from text files into excel将文本文件中的特定行复制到excel中
【发布时间】:2017-07-26 09:59:00
【问题描述】:

我开发了以下代码来打开大量文本文件(在同一个文件夹中)并将每个文件中的所有内容复制到 excel 中(文本文件的每一行一个单元格,每个文本文件一个行)。

但是,我不需要文本文件中的所有数据,这会减慢处理速度。文本文件格式如下:

DATASET UNSTRUCTURED_GRID
POINTS 5 float
0.096853 0.000000 0.111997
0.096853 -0.003500 0.111997
0.096890 0.000000 0.084015
0.096853 -0.003500 0.111997
0.096890 -0.003500 0.084015
CELL_DATA 5
SCALARS pressure float 1
LOOKUP_TABLE default
-0.000000
-0.000000
-3.000000
-2.000000
-6.000000

我需要从此文件中复制的数据是第二批数字(低于“LOOKUP_TABLE 默认值”)。此示例中的行数为 5(如以“CELL_DATA”开头的行所述,但此数字可能因文件而异。

总而言之,我正在查看我的代码以仅将最后一批数字复制到 excel 中,而不是所有内容,但我不知道如何解决这个问题。

任何帮助或建议将不胜感激。

Sub ImportTextFile()

Dim RowNdx As Integer
Dim ColNdx As Integer
Dim TempVal As String
Dim WholeLine As String
Dim Pos As Integer
Dim NextPos As Long
Dim SaveColNdx As Integer

FName = "E:\zdump\"
MyFile = Dir(FName & "*.txt")
Sep = vbLf

SaveColNdx = ActiveCell.Column
RowNdx = ActiveCell.Row

Do While MyFile <> ""
    Open (FName & MyFile) For Input As #1

    While Not EOF(1)
        Line Input #1, WholeLine
        If Right(WholeLine, 1) <> Sep Then
            WholeLine = WholeLine & Sep
        End If
        ColNdx = SaveColNdx
        Pos = 1
        NextPos = InStr(Pos, WholeLine, Sep)
        While NextPos >= 1
            TempVal = Mid(WholeLine, Pos, NextPos - Pos)
            Cells(RowNdx, ColNdx).Value = TempVal
            Pos = NextPos + 1
            ColNdx = ColNdx + 1
            NextPos = InStr(Pos, WholeLine, Sep)
        Wend
        RowNdx = RowNdx + 1
    Wend
    Close #1
    MyFile = Dir()
    Debug.Print text
Loop End Sub

【问题讨论】:

    标签: vba excel text-files


    【解决方案1】:

    试试这个:

    Dim RowNdx As Integer
    Dim ColNdx As Integer
    Dim TempVal As String
    Dim WholeLine As String
    Dim Pos As Integer
    Dim NextPos As Long
    Dim SaveColNdx As Integer
    Dim SaveRowNdx As Long
    Dim FoundData As Boolean
    Dim NumberOfData As Long
    
    FName = "E:\zdump\"
    MyFile = Dir(FName & "*.txt")
    Sep = vbLf
    
    ColNdx = ActiveCell.Column
    RowNdx = ActiveCell.Row
    SaveRowNdx = RowNdx
    
    Do While MyFile <> ""
        Open (FName & MyFile) For Input As #1
    
        While Not EOF(1)
            Line Input #1, WholeLine
    
            If Right(WholeLine, 1) <> Sep Then
                WholeLine = WholeLine & Sep
            End If
            Pos = 1
            NextPos = InStr(Pos, WholeLine, Sep)
            While NextPos >= 1
                TempVal = Mid(WholeLine, Pos, NextPos - Pos)
    
                If FoundData = False Then
                    If InStr(TempVal, "CELL_DATA") Then
                        NumberOfData = Val(Right(TempVal, Len(TempVal) - Len(Left(TempVal, Len("CELL_DATA") + 1))))
                    End If
    
                    If InStr(TempVal, "LOOKUP_TABLE default") <> 0 Then
                        FoundData = True
                    End If
    
                    Pos = NextPos + 1
                    NextPos = InStr(Pos, WholeLine, Sep)
                Else
                    If NumberOfData <> 0 Then
                        Cells(RowNdx, ColNdx).Value = TempVal
                        Pos = NextPos + 1
                        RowNdx = RowNdx + 1
                        NextPos = InStr(Pos, WholeLine, Sep)
                        NumberOfData = NumberOfData - 1
                    End If
                End If
            Wend
    
        Wend
        Close #1
        FoundData = False
        ColNdx = ColNdx + 1
        Cells(SaveRowNdx, ColNdx).Activate
        RowNdx = SaveRowNdx
        MyFile = Dir()
        'Debug.Print Text
    Loop
    

    【讨论】:

    • 感谢您提供此代码!!!非常感激。除了关于我的文本文件的一件事外,它工作得很好。此代码似乎没有在我的文本文件中找到换行符,而是将文本视为一个连续行。在我的初始代码中,您将看到我必须将分隔符 (Sep) 定义为“vbLf”,我可以使用它来显示文本文件中的换行符。有没有一种简单的方法可以将它重新合并到代码中?
    • 我不明白你为什么需要找到换行符。我运行了你的代码,它和我的一样:将每一行视为一个文本,并将整行放在一个单元格中。 @乔恩
    • 嗨 Rafael,问题是对于我的文本文件,它无法找到文本文件的每一行结束的位置,而是将整个文件视为一个非常长的行。我不确定为什么会发生这种情况,我猜它是某种字符编码 unix 行结尾的东西或其他与我的代码没有拾取的文本文件。下面的链接讨论了这个问题。 mrexcel.com/forum/excel-questions/…
    • @Jon 我重新编辑了代码。由于我没有像您这样的正确文本文件,因此我不确定它是否会成功。不过你可以试试。
    • 非常感谢拉斐尔。现在对我来说非常有效。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 2017-04-21
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多