Hantering av textfiler (FSO)
Inledning
Här samlas alla tips som berör textfiler och hur dessa kan hanteras i Excel.
För mer information om FSO se Fil- och mapphantering.
Se också följande tips, vilka också omfattar textfiler:
- Exportera cellområdesdata till textfil.
- Lista cellinnehåll i textfil - Reviderad
- Importera textfiler med fler rader än 65536 - Reviderad
- Rensa och konvertera importerad textdata
För tillämpning i Excel 97 krävs en egenutvecklad SPLIT-funktion som finns att tillgå här»
Läsa in data från textfil
Här demonstreras en teknik för att läsa in data från en textfil. Det som styr förfarandet är hur data är disponerat i textfilen. Split-funktionen ger oss flera möjligheter att bestämma vilken avgränsare som ska användas, såsom komma, tabb, semikolon mfl.
I vissa fall krävs det litet experimenterande innan rätt avgränsare kan identifieras och ibland förekommer det flera avgränsare, vilket detta exempel bl a belyser.
Bilden nedan visar hur data är disponerad i textfilen för detta exempel.
Så här ser data ut i Excel innan funktionen "Text till kolumner" exekveras i koden nedan:
Option Explicit
Option Compare Text
Sub Lasa_Textfil()
'© 2002 Alla rättighter XL-Dennis
Dim fsoObj As Scripting.FileSystemObject
Dim fsoFile As Scripting.File
Dim fsoTS As Scripting.TextStream
Dim vaData As Variant
Dim i As Long
Set fsoObj = New Scripting.FileSystemObject
Set fsoFile = fsoObj.GetFile("e:\Arbetsmaterial\test.txt")
Set fsoTS = fsoFile.OpenAsTextStream(ForReading, TristateFalse)
'Split-funktionen finns ej tillgänglig i Excel 97.
'Hela textfilen läses in och data delas upp per rad genom vbNewLine.
vaData = Split(fsoTS.ReadAll, vbNewLine, , vbTextCompare)
i = UBound(vaData)
Range(Cells(1, 1), Cells(i, 1)).Value = vaData
'Split-funktionen tillåter inte flera avgränsare varför vi måste här dela upp texten ytterligare.
Columns("A:A").TextToColumns _
Destination:=Range("A1"), _
DataType:=xlDelimited, _
FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), _
Array(4, 1), Array(5, 1))
fsoTS.Close
Set fsoFile = Nothing
Set fsoObj = Nothing
End Sub