Import von mehreren txt-Dateien

Hallo,

ich brauche eine Lösung für dieses Problem:

Excel soll alle im Zielordner befindlichen txt-Dateien (die Anzahl variiert von Tag zu Tag) importieren und untereinander in der Tabelle einfügen.

Müssen die txt-Dateien vor dem Importieren zusammengefügt werden oder ist das auch während des Vorgangs möglich?

Da dieser Vorgang jeden Tag gemacht werden muss, wäre es gut, wenn dieser Fakt bei der Lösung auch berücksichtig wird.

Ich bitte um eine einfache Erklärung von null an.

Hoffe, ihr könnt mir helfen.

LG

Hallo kathrina,

Excel soll alle im Zielordner befindlichen txt-Dateien (die
Anzahl variiert von Tag zu Tag) importieren und untereinander
in der Tabelle einfügen.

unklar.
Nehmen wir mal an du bist im Hauptsitz der Firma und alle Zweigstellen schicken dir täglich da so eine txt-Datei.
In welchen Ordner kommen die denn? Pro Tag ein andrer Ordner oder immer der gleiche Ordner aber im Dateinamen der txt-Dateien erkennt man das datum? Oder anders?

Übrigens, um welche Excelversion geht es?
Um welche Anzahl geht es täglich, 3, 10, 100?

Müssen die txt-Dateien vor dem Importieren zusammengefügt
werden oder ist das auch während des Vorgangs möglich?

nein/ja.

Da dieser Vorgang jeden Tag gemacht werden muss, wäre es gut,
wenn dieser Fakt bei der Lösung auch berücksichtig wird.

„Jeden tag“ bedeutet Automatismus, höchstwahrscheinlich eine Makrolösung. Da wird das berücksichtigt.

Ich bitte um eine einfache Erklärung von null an.

oha. Mal schauen.

Gruß
Reinhard

Hallo kathrina,

Hy :smile:

unklar.
Nehmen wir mal an du bist im Hauptsitz der Firma und alle
Zweigstellen schicken dir täglich da so eine txt-Datei.
In welchen Ordner kommen die denn? Pro Tag ein andrer Ordner
oder immer der gleiche Ordner aber im Dateinamen der
txt-Dateien erkennt man das datum? Oder anders?

Also es werden nur die Dateien geschickt. Das sind mal nur 2 manchmal aber auch bis zu 10 an einem Tag. Die sammel ich erst mal und speicher sie ab. Wo - das kann ich mir ja aussuchen~ nehmen wir mal an, in einem eigens dafür angelegten Ordner auf dem Desktop. 1x pro Tag will ich die gesammelten dann in Excel importieren.
Was meinst du mit dem Datum?

Übrigens, um welche Excelversion geht es?
Um welche Anzahl geht es täglich, 3, 10, 100?

Es geht um 2003, da soll es tatsächlich mit gemacht werden. Problem ist aber, dass ich es zu Hause testen möchte und da hab ich 2007.
Anzahl: 2 bis max. 10

„Jeden tag“ bedeutet Automatismus, höchstwahrscheinlich eine
Makrolösung. Da wird das berücksichtigt.

Ja das hab ich mir gedacht. Allerdings hab ich davon keine Ahnung :confused: Deshalb auch meine Bitte „von null an“ :smile:
Ich hatte vorhin auch was davon gelesen, wie man mehrere Dateien zusammenfügen kann, da sprach man von „copy-Befehlen“ - allerdings so, dass man schon wissen muss, wo man sowas überhaupt eingibt = wovon ich auch keine Ahnung habe :{

Ich bitte um eine einfache Erklärung von null an.

oha. Mal schauen.

Hm jetzt weißt du, was dieser Satz sollte :smiley:

Gruß
Reinhard

LG zurück
Kathrina

Hallo kathrina,

Nehmen wir mal an du bist im Hauptsitz der Firma und alle
Zweigstellen schicken dir täglich da so eine txt-Datei.
In welchen Ordner kommen die denn? Pro Tag ein andrer Ordner
oder immer der gleiche Ordner aber im Dateinamen der
txt-Dateien erkennt man das datum? Oder anders?

Also es werden nur die Dateien geschickt. Das sind mal nur 2
manchmal aber auch bis zu 10 an einem Tag. Die sammel ich erst
mal und speicher sie ab. Wo - das kann ich mir ja aussuchen~
nehmen wir mal an, in einem eigens dafür angelegten Ordner auf
dem Desktop. 1x pro Tag will ich die gesammelten dann in Excel
importieren.
Was meinst du mit dem Datum?

„Wo - das kann ich mir ja aussuchen“ ist richtig, bedeutet aber auch, entscheide dich für eine Variante.

Variante1: Du hast pro Tag einen andren Ordner, z.B. mit namen Kassensturz20091228 wo es Dateien gibt wie ZweigstA.txt, ZweigstB.txt
Variante2: Oder aber nur einen Ordner „Kassnsturz“ wo es Dateien gibt wie
ZweigstA_20091228.txt, ZweigstA_20091227.txt, ZweigstA_20091226.txt,
ZweigstB_20091226.txt, usw.

Das meinte ich mit Datum im Namen.

Ein Makro muß ja wissen welche variante vorliegt und in welcehem Ordner es welche dateien zusammensuchen soll.

Übrigens, um welche Excelversion geht es?
Um welche Anzahl geht es täglich, 3, 10, 100?

Es geht um 2003, da soll es tatsächlich mit gemacht werden.
Problem ist aber, dass ich es zu Hause testen möchte und da
hab ich 2007.

Okay, das mit 2007 wollte ich wissen.

Ich hatte vorhin auch was davon gelesen, wie man mehrere
Dateien zusammenfügen kann, da sprach man von „copy-Befehlen“

  • allerdings so, dass man schon wissen muss, wo man sowas
    überhaupt eingibt = wovon ich auch keine Ahnung habe :{

Du wirst über Dos gestolpert sein, da kann man mit dem Befehl Copy txt-dateien zusammenfügen zu einer Datei. Aber das spielt hier keine Rolle. Excel-Makros sind mächtiger als Dos, (wenn auch nicht schneller *gg*)

Gruß
Reinhard

OK,

„Wo - das kann ich mir ja aussuchen“ ist richtig, bedeutet
aber auch, entscheide dich für eine Variante.

Variante1: Du hast pro Tag einen andren Ordner, z.B. mit namen
Kassensturz20091228 wo es Dateien gibt wie ZweigstA.txt,
ZweigstB.txt
Variante2: Oder aber nur einen Ordner „Kassnsturz“ wo es
Dateien gibt wie
ZweigstA_20091228.txt, ZweigstA_20091227.txt,
ZweigstA_20091226.txt,
ZweigstB_20091226.txt, usw.

Das meinte ich mit Datum im Namen.

Also um das mit den Ordnern zu klären:

Ich habe 1 Ordner. Immer der selbe. Dort kommen aber jeden Tag mehrere verschiedene txt-Dateien rein. Sobald die importiert sind, werden die txt gelöscht. Später kommen wieder neue rein.
Also Variante 2.

Ein Makro muß ja wissen welche variante vorliegt und in
welcehem Ordner es welche dateien zusammensuchen soll.

Brauchst du noch andere Infos?

LG

Grüezi Kathrina

Excel soll alle im Zielordner befindlichen txt-Dateien (die
Anzahl variiert von Tag zu Tag) importieren und untereinander
in der Tabelle einfügen.

Müssen die txt-Dateien vor dem Importieren zusammengefügt
werden oder ist das auch während des Vorgangs möglich?

Das kann durchaus vom Code selbst gemacht werden.

Haben die Textdateien Spaltenüberschriften oder sind es einfach reine Daten?
Welchen Spaltentrenner haben die Text-Dateien?

Kannst Du einen Auszug (ab der ersten Zeile plus einige mehr) hier zur Verfügung stellen?
Dann können wir etwas direkter vorgehen und testen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Kathrina

Hy :smile:

Haben die Textdateien Spaltenüberschriften oder sind es
einfach reine Daten?

Sie haben Überschriften

Welchen Spaltentrenner haben die Text-Dateien?

Tab

Kannst Du einen Auszug (ab der ersten Zeile plus einige mehr)
hier zur Verfügung stellen?
Dann können wir etwas direkter vorgehen und testen.

Wie meinst du das? Wie es im Editor steht? Oder wie es vorher in Word stand`? Oder wie es letztendlich in Excel stehen soll?

LG

Grüezi Kathrina

Haben die Textdateien Spaltenüberschriften oder sind es
einfach reine Daten?

Sie haben Überschriften

Diese dürften dann nur einmal in diesem Zusammanzug stehen, vermute ich?

Welchen Spaltentrenner haben die Text-Dateien?

Tab

OK, dann würde man die Daten am Tab in einzelne Spalten aufteilen.

Kannst Du einen Auszug (ab der ersten Zeile plus einige mehr)
hier zur Verfügung stellen?
Dann können wir etwas direkter vorgehen und testen.

Wie meinst du das? Wie es im Editor steht? Oder wie es vorher
in Word stand`? Oder wie es letztendlich in Excel stehen soll?

…dass die Daten mal in Word waren wusste ich noch gar nicht… :wink:

Spielt aber keine grosse Rolle - wenn Du einen Auszug aus einer der Dateien wie sie mit dem Editor oder WordPac geöffnet werden hast wäre das super (dürfen auch anonymisiert sein). Einfach so halt wie sie in der Text-Datei stehen die importiert werden sollen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Ich habe 1 Ordner. Immer der selbe. Dort kommen aber jeden Tag
mehrere verschiedene txt-Dateien rein. Sobald die importiert
sind, werden die txt gelöscht. Später kommen wieder neue rein.
Also Variante 2.

Hallo kathrina,

nimm eine neue leere Mappe.
Alt+F11, Extras—Verweise, dort das Häkchen setzen bei:
„Microsoft Scripting Runtime“.
Dann Einfügen—Modul, dort den nachstehenden Code reinkopieren.
In der Codezeile:
For Each Datei In GetFiles(„C:\test“, False, „*.txt“)
änderst du „C:\Test“ in deinen Ordnerpfad ab.

Editor schliessen.
In Excel Alt+F8, dann Makro „TextdateienEinlesen“ ausführen lassen.

Gruß
Reinhard

Option Explicit
' Achtung!
' --\> Microsoft Scripting Runtime - Verweis notwendig!
Sub TextdateienEinlesen()
Dim Datei As File, Zei As Long, Satz As String
On Error GoTo Ende
Application.ScreenUpdating = False
Columns(1).ClearContents
Close
For Each Datei In GetFiles("C:\test", False, "\*.txt")
 Open Datei For Input As #1
 While Not EOF(1)
 Zei = Zei + 1
 Line Input #1, Satz
 Cells(Zei, 1) = Satz
 Wend
 Close
Next
Range("A1:A" & Zei).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, \_
 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, \_
 Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo \_
 :=Array(1, 1)
Ende:
If Err.Number 0 Then MsgBox "Fehler bei Zeile " & Zei
Application.ScreenUpdating = True
End Sub
'
Public Function GetFiles(FolderPath As String, scanSubDirectorys As Boolean, Optional \_
SearchPattern As String, Optional SortBy As String) As Collection
 ' Die MSR - Objekte
 Dim objFs As New FileSystemObject
 Dim objRootFolder As Folder
 Dim objSubFolder As Folder
 Dim objFile As File
 ' Zwischenspeicher für den Rückgabewert der Funktion
 Dim HColl As New Collection
 Set HColl = Nothing
 ' Wenn kein Suchmuster angegeben alle Dateien zurückliefern
 If SearchPattern = "" Then SearchPattern = "\*"
 ' Das Ordner-Objekt für den angegebenen Pfad laden
 On Error GoTo err01
 Set objRootFolder = objFs.GetFolder(FolderPath)
err01:
 If Err.Number 0 Then
 Set GetFiles = HColl
 Exit Function
 End If
 ' Alle Dateien in diesem Ordner durchlaufen
 For Each objFile In objRootFolder.Files
 ' Wenn das Suchmuster übereinstimmt Datei der Collection hinzufügen
 If objFile.Name Like SearchPattern Then
 HColl.Add objFile
 End If
 Next
 ' Wenn angegeben, die Unterordner des Startpfades durchlaufen
 If scanSubDirectorys Then
 For Each objSubFolder In objRootFolder.SubFolders
 ' Alle per Rekursion zurückgelieferten Dateien der Hilfscollection hinzufügen
 For Each objFile In GetFiles(objSubFolder.Path, scanSubDirectorys, SearchPattern)
 HColl.Add objFile
 Next
 Next
 End If
 ' Wenn angegeben, die Hilfs-Collection sortieren
 If SortBy "" Then
 Set HColl = SortItemCollection(HColl, SortBy)
 End If
 ' Rückgabewert
 Set GetFiles = HColl
End Function
'
Public Function SortItemCollection(col As Collection, strPropertyName) As Collection
 Dim colNew As Collection
 Dim objCurrent As Object
 Dim objCompare As Object
 Dim lngCompareIndex As Long
 Dim variantCurrent As Variant
 Dim variantCompare As Variant
 Dim blnGreaterValueFound As Boolean
 'make a copy of the collection, ripping through it one item
 'at a time, adding to new collection in right order...
 Set colNew = New Collection
 For Each objCurrent In col
 'get value of current item...
 variantCurrent = CallByName(objCurrent, strPropertyName, VbGet)
 'setup for compare loop
 blnGreaterValueFound = False
 lngCompareIndex = 0
 For Each objCompare In colNew
 lngCompareIndex = lngCompareIndex + 1
 variantCompare = CallByName(objCompare, strPropertyName, VbGet)
 'die Vergleichstypen auf Variant geändert, somit können beliebige Datentypen \_
miteinander verglichen werden
 If variantCurrent 

Hallo Reinhard,

vielen Dank für deine Hilfe.
Dieses Visual Basic habe ich noch nie gesehen…

Bis zur Codezeile kam ich noch mit…

Dann allerdings nicht mehr so wirklich.

Ich kann so nicht auffassen, was ich da eigentlich mache und was da vor sich geht. Was schlecht ist, wenn ich das jmd. anderem vorführen bzw. weitergeben möchte :confused:

Aber danke für deine Mühe!

LG