2017-07-26 109 views
0

我已經開發出了下面的代碼打開了大量的文本文件(同一文件夾內),並從每個文件的所有內容複製到Excel(一個單元格爲文本文件的每一行&一個行爲每個文本文件)。從文本文件中的特定行復制到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」開始的行中所指出的,但是這個數字可以從文件到文件改變)。

總之,我正在查看我的代碼,只將最後一批數字複製到出類拔萃的,而不是一切,但我在就如何解決這個虧損

任何幫助或建議將不勝感激

子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 

回答

0

試試這個。:

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 
+0

非常感謝您爲此代碼!非常感激。它與我的文本文件完全不同。此代碼似乎無法在我的文本文件中找到換行符,而是將文本視爲一個連續的行。在我最初的代碼中,你會看到我必須將分隔符(Sep)定義爲'vbLf',我可以使用它來在文本文件中顯示換行符。有沒有一種簡單的方法將這個代碼納入代碼? – Jon

+0

我不明白你爲什麼需要找到換行符。我運行了你的代碼,它和我的代碼一樣:將每行都作爲一個單獨的文本處理,並將整行放在一個單元格中。 @Jon –

+0

嗨拉斐爾,問題在於,對於我的文本文件,它無法找到每行文本文件的結尾,而是將整個文件視爲一條很長的一行。我不知道爲什麼會發生這種情況,我猜測它是某種編碼unix行尾的字符,或者是我的文本文件中沒有代碼的東西。下面的鏈接談論這個問題。 https://www.mrexcel.com/forum/excel-questions/787225-vba-reading-text-file-parsing-line-breaks-carriage-returns.html – Jon

相關問題