Acest tutorial va arăta cum să citiți conținut din fișiere text și să-l inserați în foi de lucru cu VBA.
Citiți conținutul fișierului text în foaia de lucru
Cel mai simplu mod de a citi conținutul unui fișier text este copierea acestuia în celula unei foi de lucru.
123456789101112 | Sub FSOPasteTextFileContent ()Dim FSO ca nou FileSystemObjectSetați FSO = CreateObject ("Scripting.FileSystemObject")Set FileToRead = FSO.OpenTextFile ("C: \ Test \ TestFile.txt", ForReading) 'adăugați aici calea fișierului dvs. textTextString = FileToRead.ReadAllFileToRead.CloseThisWorkbook.Sheets (1) .Range ("A1"). Value = TextString 'puteți specifica foaia de lucru și celula unde să lipiți conținutul fișierului textSfârșitul Sub |
Codul de mai sus folosește FileSystemObject. Pentru a-l utiliza, va trebui să setați o referință la biblioteca de execuție a scriptului VB. Vedeți aici pentru mai multe informații.
Fără a utiliza FileSystemObject puteți lipi conținutul fișierului text cu codul de mai jos. Dacă fișierul text conține separator de linie, acesta va fi lipit rând cu rând.
123456789101112 | Sub PasteTextFileContent ()Dim wbExcel As Workbook, wbText As WorkbookDim wsExcel Ca foaie de lucruSet wbExcel = ThisWorkbook 'specifică aici în ce fișier Excel conținutul fișierului text trebuie lipitSetați wsExcel = wbExcel.Sheets (1) 'specificați aici ce foaie de lucru să utilizațiSet wbText = Workbooks.Open ("C: \ Test \ TestFile.txt") 'adăugați aici calea fișierului dvs. textwbText.Sheets (1) .Cells.Copy wsExcel.CellswbText.Close SaveChanges: = FalseSfârșitul Sub |
Citiți conținutul fișierului text rând cu rând, coloană cu coloană
Fișierul dvs. text poate avea mai multe rânduri și mai multe elemente listate în rândurile separate prin virgulă, punct și virgulă, filă, spațiu etc. Pentru a citi și lipi corect conținutul fișierului text, este posibil să aveți nevoie de acest cod mai jos:
1234567891011121314151617181920212223242526 | Sub PasteTextFileContentWithSeparators ()Dim StrLine Ca șirDim FSO ca nou FileSystemObjectDim TSO ca obiectDim StrLineElements as VariantReduceți indicele atât de multDim i As LongDim Delimiter ca ȘirSetați FSO = CreateObject ("Scripting.FileSystemObject")Setați TSO = FSO.OpenTextFile ("C: \ Test \ TestFile.txt")Delimitator = "," 'delimitatorul care este utilizat în fișierul dvs. textIndex = 1Do While TSO.AtEndOfStream = FalseStrLine = TSO.ReadLineStrLineElements = Split (StrLine, Delimiter)Pentru i = LBound (StrLineElements) To UBound (StrLineElements)Celule (Index, i + 1) .Value = StrLineElements (i) 'acest cod va începe să lipească conținutul fișierului text din celula A1 (Celula (1,1)) a foii de lucru activeApoi euIndex = Index + 1BuclăTSO.ÎnchideSfârșitul Sub |
Delimitatorul utilizat în fișierul text poate fi virgulă („,”), virgulă cu spațiu („,„), punct și virgulă („;”), punct și virgulă cu spațiu („;„), spațiu („„), filă (schimbați apoi Delimitator = vbTab) sau, în cazuri rare, orice alt caracter.
Citiți fișiere text în matrice
Dacă trebuie să citiți conținutul fișierului text într-o matrice și să lipiți rând cu rând, coloană cu coloană în foaia de lucru, veți avea nevoie de acest cod mai jos:
12345678910111213141516171819202122232425262728293031323334 | Sub ReadDelimitedTextFileIntoArray ()Dim Delimiter Ca ȘirDim TextFile Ca întregDim FilePath Ca șirAtenuați conținutul fișierului ca șirDim LineArray () Ca șirDim DataArray () Ca șirDim TempArray () Ca șirDim rw As Long, col As LongDelimitator = vbTab 'delimitatorul care este utilizat în fișierul dvs. textFilePath = "C: \ Test \ TestFileTab.txt"rw = 1TextFile = FreeFileDeschideți FilePath pentru introducere ca fișier textFileContent = Input (LOF (TextFile), TextFile)Închideți TextFileLineArray () = Split (FileContent, vbNewLine) 'schimbați vbNewLine în vbCrLf sau vbLf în funcție de separatorul de linie care este utilizat în fișierul textPentru x = LBound (LineArray) To UBound (LineArray)Dacă Len (Trim (LineArray (x))) 0 AtunciTempArray = Split (LineArray (x), Delimiter)col = UBound (TempArray)ReDim Preserve DataArray (col, rw)Pentru y = LBound (TempArray) To UBound (TempArray)DataArray (y, rw) = TempArray (y)Celule (x + 1, y + 1). Valoare = DataArray (y, rw) "acest cod va începe să lipească conținutul fișierului text din celula A1 (celulă (1,1)) a foii de lucru activeUrmătorul yEnd Ifrw = rw + 1Următorul xSfârșitul Sub |
Separatoarele de linie din fișierul text pot fi o combinație de retur de transport și linie (Chr (13) + Chr (10)) sau linie (Chr (10)). Utilizați vbCrLf sau vbLf, în consecință. Dacă nu sunteți sigur, utilizați vbNewLine pentru a indica separatorul de linie.