Nivå: Avancerad
Importera textfiler till en Excel-arbetsbok? Hur gör man då? Läs vidare i den här bloggposten, så visar jag hur du importerar textfiler till en Excel-arbetsbok med hjälp av makro. Textfilerna kan i princip importeras på två sätt:
- Man kan lägga varje textfil som en kolumn i ett Excel-ark
- Man kan lägga varje data från en textfil i en ny flik i ett Excel-ark
Vilket sätt man använder beror på vad man vill göra med de data man importerar. Jag skall visa exempel på bägge metoderna och hur man går tillväga.
Textfiler
Något om textfilerna. Oftast har textfilerna samma format som man vill importera. De är uppställda på samma sätt och följer samma mall. Det viktigaste är att datan är avskilda på ett likvärdigt sätt. Excel har många olika sätt att hantera textfilsdata . För ett tag sedan genomförde jag en dataimport på över 3000 textfiler med data till en Excel-arbetsbok. I detta fall ville man ha in data enligt alternativ 1 ovan. Skall man importera stora mängder textfiler, måste man skriva ett makro som utför jobbet.
VBA-kod
Vi ska ta titta på ett makro i Excel som importerar data från textfiler. Först tittar vi på hur en import ser ut enligt alternativ 1. Som vanligt, starta Excel. Gå vi in i VBA-editorn med tangenterna Alt+F11, infoga en modul och lägg in följande kod:
Sub ImporteraTextFil() Dim idx As Integer Dim fpath As String Dim fname As String Dim Counter As Integer idx = 0 fpath = "C:\Test\MyTextFiles\" fname = Dir(fpath & "*.txt") While (Len(fname) > 0) IsEmpty (ActiveCell.Value) With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _ & fpath & fname, Destination:=Range("A1")) .Name = "a" & idx .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileOtherDelimiter = "|" .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False fname = Dir End With Wend End Sub
Kommentar till VBA-koden i Excel ovan
Alternativ 1
Koden ovan importerar textfiler, enligt vad som kallas alternativ 1. Den markerade koden efter variabeln fpath är sökvägen till katalogen på enhet C, där textfilerna finns lagrade. Koden kör en While-loop vilket innebär att i detta fall skall alla filer i katalogen läggas in i Excelboken, därav villkoret som följer. Den inbyggda funktionen IsEmpty hjälper oss att lägga in nya textfiler i nästa tomma kolumn. Därefter kommer olika formateringsinställningar, för hur textfilerna är formaterade som används vid importen. Koden har en begränsning och det är att den kraschar om den stöter på en textfil som är tom och inte har data. För att det ska vara korrekt, får man skriva en felhanterare som fixar detta. Det är inte gjort i detta exempel.
Alternativ 2
Om vi vill ha att textfilerna läggs in enligt alternativ 2, byt ut raden med koden för IsEmpty, med följande kod: Sheets.Add.Name = fname . Det är allt som behöver göras! Nu läggs varje textfil in på en ny flik i Excel!
Begränsningar
Exemplet är utfört på Excel version 2007. I Excel version 2007 kan ett kalkylblad innehålla 1 048 576 rader och 16 384 kolumner.
Referenser
Klicka här för att läsa mer om Importera eller exportera textfiler