.txt Dateien mit Excelliste zusammenführen

Dieses Thema .txt Dateien mit Excelliste zusammenführen im Forum "Microsoft Office Suite" wurde erstellt von DonCravallo, 22. Nov. 2006.

Thema: .txt Dateien mit Excelliste zusammenführen Folgende Problemstellung: ich habe von einem Lieferanten eine Excelliste mit div. Informationen bekommen wie z.B....

  1. Folgende Problemstellung: ich habe von einem Lieferanten eine Excelliste mit div. Informationen bekommen wie z.B. Artikelnummer, Preis usw.
    Jetzt sollte zu jedem Artikel noch der passende Text dazukommen. Ist auch vorhanden jedoch für jeden Artikel eine eigene .txt Datei. Diese .txt Dateien haben den gleichen Namen wie die Artikelnummer.

    z.B. Artikelnummer 22100024230 -> passender Text 22100024230.txt

    Wie schaffe ich es, zum Artikel 22100024230 in der Zelle A2, in der Spalte K2 den passenden Text aus der Datei 22100024230.txt zu importieren, verknüpfen oder was auch immer, so das ich am Schluss eine vollständige Excelliste samt Artikeltext entsteht, diese dann in .csv abzuspeicern und in meine Shop zu importieren kann?

    Ich hoffe, das meine Beschreibung einigermaßen verständlich ist.

    Danke im voraus für die Hilfestellung
     
  2. Soll das nur einmalig gemacht werden, oder kommt sowas jede Woche?
    Gibt es zu jedem Datensatz eine TXT-Datei und zu jeder TXT-Datei einen Datensatz?
    Wieviele sind es?
    Ist der passende Text ein ganz normaler Fließtext?
    Per Makro schwebt mir da schon was vor.
    Poste auch mal den Pfad auf dem die TXT-Dateien abgespeichert sind.
     
  3. Hallo Klexy

    Zur 1. Frage
    - Es gibt alle 1-2 Monate zusätzliche Artikel in Excel + TXT Dateien

    Frage 2:
    - Ja es gibt zu jedem Datensatz eine TXT-Datei

    Frage 3:
    - ca. 2.500

    Frage 4:
    -es ist normaler Fleißtext jedoch die Überschrift ist immer Fett, also mit <b>Überschrift</b> und danach zwei kleine Rechtecke für den Zeilenumbruch


    Eine Musterexcel mit 10 artikel und die passenden TXT-Dateien schicke ich Dir per Mail.

    Danek für Deine Hilfe
     
  4. Hallo DonCravallo,

    wenn die txt-Dateien alle in einem Verzeichnis liegen kannst du den nachfolgenden Makro benutzen. Den Pfad müßtest du noch anpassen.
    (siehe Makro)
    Code:
      sPfad = ThisWorkbook.Path ->oder hier sPfad = c:\Test angeben
    Eine Kopie deiner Datei anfertigen und öffnen. Das zu bearbeitende Blatt muß das aktive sein. Makro aufrufen und schauen, was passiert.

    Gruß matjes :)
    Code:
    Option Explicit
    
    Sub ArtNrTXTDateienInSpalteK()
    
      Const cZ_ERSTEWERTEZEILE = 2->arbeiten ab Zeile 2
      Const cSP_ARTIKELNR = 1     ->Spalte A
      Const cSP_TEXT = 11         ->Spalte K
    
      Dim ws As Worksheet
      Dim sPfad As String, sDateinameFull As String
      Dim sArtNr As String, sTxt As String
      Dim lRows As Long, x As Long, pos As Long
      
     ->Suchpfad für ArtikelNr.txt Dateien = Pfad des Makros
     ->-> Makrodatei muß im Verzeichnis der txt-Dateien liegen
      sPfad = ThisWorkbook.Path ->oder hier sPfad = c:\Test angeben
      
      
     ->aktive Blatt setzen
      Set ws = ActiveSheet
      
     ->letzte Zeile Artikelnr
      lRows = ws.Cells(ws.Rows.Count, cSP_ARTIKELNR).End(xlUp).Row
      
      For x = cZ_ERSTEWERTEZEILE To lRows
        sArtNr = ws.Cells(x, cSP_ARTIKELNR).Value
        If sArtNr <>  Then
          sDateinameFull = sPfad & Application.PathSeparator & sArtNr & .txt
         ->txt-Datei suchen
          With Application.FileSearch
            .NewSearch
            .LookIn = sPfad
            .SearchSubFolders = False
            .FileName = sArtNr & .txt
            .MatchTextExactly = True
            .FileType = msoFileTypeAllFiles
            If .Execute() > 0 Then
              If Application.FileSearch.FoundFiles.Count <> 1 Then
                MsgBox Datei ist mehrfach vorhanden & vbLf & sArtNr & .txt
              Else
                sTxt = TxtDateiLesen(Application.FileSearch.FoundFiles(1))
                If sTxt =  Then
                  If vbNo = MsgBox( _
                          Beim Lesen der txt-Datei ist ein Fehler aufgetreten. & vbLf & _
                           sDateinameFull, vbDefaultButton1 + vbYesNo) Then
                    GoTo AUFRAEUMEN
                  End If
                Else
                  ws.Cells(x, cSP_TEXT).Value = sTxt
                 ->Überschrift noch fett machen
                  pos = InStr(1, sTxt, vbLf)
                  If pos > 1 Then
                    ws.Cells(x, cSP_TEXT).Characters(1, pos - 1).Font.Bold = True
                  End If
                End If
              End If
            End If
          End With
        End If
      Next
    AUFRAEUMEN:
      Set ws = Nothing
    End Sub
    
    '*********************************************************************************
    Private Function TxtDateiLesen(sDateinameFull As String) As String
      Dim FileHandle As Integer, s As String, sTmp As String
      FileHandle = FreeFile
      Open sDateinameFull For Input As #FileHandle
      Do While Not EOF(1)
      Line Input #1, sTmp
        If s <>  Then s = s & vbLf & sTmp Else s = sTmp
      Loop
      Close #FileHandle
      DoEvents->damit sie auch geschlossen werden kann
      TxtDateiLesen = s
    End Function
     
     
  5. Vielen Dank für Deine Mühe. Ich hoffe, ich bin damit nicht überfordert. So ein Excel Spezialist bin ich nun auch wieder nicht.
    Mir ist noch nicht ganz klar wo ich die beiden Codes hingeben bzw. hinkopieren muss.

    Hilf mir bitte auf die Sprünge.

    Danke schon mal im voraus.

    Gruß DC
     
  6. Hallo DonCravallo,

    dann mal ein kurze Anleitung:

    '==============================
    'Makro in Excel-Datei speichern
    '==============================
    'a) neue Excel-Datei öffnen
    'b) mit Alt+F11 VB-Editor öffnen
    'd) im Projekt-Fenster
    '   unter VBAProject(betreffende Excel-Datei)
    '   mit rechter Maustaste-> Einfügen-Modul
    '   (die Code-Seite des Moduls öffnet sich)
    'e) Das Makro dort hineinkopieren (per Copy und Paste)
    'f) mit Alt+Q VB-Editor schliessen
    'g) Datei unter aussagekräftigem Namen speichern.
    (z.B. Makros_TxtImport.xls)


    Diese Datei in des Verzeichnis mit den Text-Dateien kopieren
    und dort öffnen.


    Kopie der produktiven Datei, in die die Texte importiert werden sollen, anlegen.
    Die Kopie öffnen, das entsprechende Blatt aktivieren.

    Unter Extras->Makro->Makros-> ArtNrTXTDateienInSpalteK  markieren -> Ausführen

    und schauen, was passiert.

    Gruß Matjes :)
     
  7. Sodele, jetzt bin ich auch soweit mit meiner Version.

    Mein Makro gehört in die Datei Personl.xls, welche üblicherweise unter C:\...\Microsoft Office\office\XLStart\ deponiert ist. In dieser Datei kannst du alle deine Makros sammeln, denn die ist im Hintergrund immer geöffnet und verfügbar.

    Setz dir mit Ansicht > Symbolleisten > Anpassen > Befehle > Neu einen neuen Button irgendwo in deine Symbolleiste. Dazu mußt du Neu mit der Maus an die gewünschte Stelle ziehen. Danach rechten Mausklick auf die neue Schaltfläche > Makro zuweisen > aus der Liste das entsprechende Makro auswählen.
    Unter Name und Schaltflächensymbol bearbeiten kannst du dem Ganzen noch eine gewisse Eleganz verleihen.
    Abschließend Anpassen-Fenster schließen.

    Mein Makro ist durchgehend kommentiert, damit du dir ein Bild davon machen kannst, was da so alles passiert. Vor dem Einsatz mußt du die Parameter g_TXT_Pfad und g_Haupttabelle ganz oben im Makro auf die zutreffenden Werte (zwischen den Anführungszeichen) setzen.
    Falls du deinen Artikeltext nicht in Spalte K haben willst, mußt du die Passagen Columns(K:K).Select überall im Makro entsprechend ändern.

    Jetzt Haupttabelle öffnen, Button drücken und fertig.
    Code:
    Sub Artikeltexte_importieren()
    
    'Festlegung der Variablen Artikelnummer und Pfad
    'der Präfix g_ ist aus optischen Gründen gewählt
    'hier: g wie Guido
      Dim g_Artikelnummer As String, g_TXT_Pfad As String, g_Haupttabelle As String
    'Festlegung des Pfades, in dem die Artikeltextdateien sind
      g_TXT_Pfad = C:\Oberordner\Unterordner\
    'Festlegung des Namens der Haupttabelle
      g_Haupttabelle = Musterdatei.xls
    'in Spalte K sollen die Artikeltexte erscheinen
      Columns(K:K).Select
    'suche die erste Leere Zelle von oben
      Selection.Find(What:=, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
        .Activate
    'gehe von dort 10 Spalten nach links
      ActiveCell.Offset(0, -10).Select
      Selection.Activate
    'Definiere den Inhalt dieser Zelle als die Artikelnummer, die importiert werden soll
    'in der Spalte seht allerdings nicht die führende Null, die im TXT-Dateinamen
    'vorhanden ist daher habe ich sie hier in der Definition hinzugefügt
      g_Artikelnummer = 0 & ActiveCell & .txt
        
    'ab hier beginnt eine Schleife, die sich so lange wiederholt,
    'bis keine Artikelnummer mehr ohne Artikeltext ist
      Do
    'wenn eine entsprechende Artikeltextdatei vorhanden ist, öffne sie
      If Dir(g_TXT_Pfad & g_Artikelnummer) <>  Then
    'TXT-Datei öffnen ab Zeile 2 (denn in der ersten ist ja sowieso nur der
    'schon in Spalte B vorhandene Artikelname
    'Trennzeichen ist die geschwungene Klammer {, weil es unwahrscheinlich ist,
    'daß die im Artikeltext vorkommt.
    'ich habe nicht den standardmäßigen Tabulator als Trennzeichen genommen,
    'weil der versehentlich oder absichtlich im Text enthalten sein könnte,
    'wodurch der Inhalt nicht in einer einzigen Spalte dargestellt werden würde
      Workbooks.OpenText FileName:=g_TXT_Pfad & g_Artikelnummer, _
        Origin:=xlWindows, StartRow:=2, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=True, OtherChar:={, FieldInfo:= _
        Array(Array(1, 2), Array(2, 1))
    'Da im Artikeltext versehentlich oder absichtlich ein Zeilenumbruch vorhanden sein könnte,
    'werden die untereinander stehenden Zellen per Formeln in Spalte B
    'in eine Zelle zusammengefasst. Die unterste enthält dann den kompletten Text
      Cells.Select
    'Alle leeren Zellen, die sich möglicherweise im Bereich des Artikeltextes befinden
    '(z.B. wenn im Artikeltext zwei Zeilenumbrüche hintereinander sein sollten, oder die 
    'leere Zeile 2, die in deinen Beispielen immer vorhanden war) werden durch §§§§§
    'ersetzt. Das kommt garantiert nicht im Taxt vor und ist für Formeln leicher zu handeln
    'als eine leere Zelle mittendrin. Diese Zellen werden durch die Formeln aus dem Artikeltext
    'herausgefiltert.
      Selection.Replace What:=, Replacement:=§§§§§, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False
      Selection.ColumnWidth = 45.43
      With Selection
        .WrapText = True
      End With
      Range(B1).Select
      ActiveCell.FormulaR1C1 = _
        =IF(RC[-1]=§§§§§,,IF(R[1]C[-1]=,RC[-1],RC[-1]& & Chr(10) & ))
      Range(B2).Select
      ActiveCell.FormulaR1C1 = _
        =R[-1]C&IF(RC[-1]=§§§§§,,IF(R[1]C[-1]=,RC[-1],RC[-1]& & Chr(10) & ))
      Range(B2).Select
      Selection.Copy
      Range(A1).Select
      If Range(A2) =  Then
      Range(B2).Select
      Selection.ClearContents
      Else
      Selection.End(xlDown).Offset(0, 1).Select
      ActiveSheet.Paste
      If Range(A3) =  Then
      Application.CutCopyMode = False
      Else
      Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlUp)), Type:=xlFillDefault
      End If
      End If
      Cells.Select
      Cells.EntireRow.AutoFit
      Range(B1).Select
      If Range(B2) =  Then
      Range(B1).Select
      Else
      Selection.End(xlDown).Select
      End If
      Selection.Activate
      g_Artikeltext = ActiveCell
    
    'sonst weiter bei keine_Artikeltextdatei_vorhanden
      Else: GoTo keine_Artikeltextdatei_vorhanden
      End If
      Windows(g_Haupttabelle).Activate
      ActiveCell.Offset(0, 10).Select
      Selection.Activate
      ActiveCell.FormulaR1C1 = g_Artikeltext
      Windows(g_Artikelnummer).Activate
    'die TXT-Datei wird ohne Speichern wieder geschlossen
      ActiveWindow.Close Savechanges:=False
      GoTo Normalweiter
    
    keine_Artikeltextdatei_vorhanden:
      ActiveCell.Offset(0, 10).Select
      ActiveCell.FormulaR1C1 = keine_Artikeltextdatei_vorhanden
      
    Normalweiter:
      Columns(K:K).Select
      Selection.Find(What:=, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
        .Activate
      ActiveCell.Offset(0, -10).Select
      Selection.Activate
    'Die Artikelnummer wird bei jedem Durchlauf der Schleife wieder neu definiert
      g_Artikelnummer = 0 & ActiveCell & .txt
    'Schleife soll so lange laufen, bis in Spalte Artikelnummer kein Eintrag mehr ist
      Loop While ActiveCell <> 
      
    'Alle Zellen, die keine_Artikeltextdatei_vorhanden enthalten, fett rot formatieren
    '(bedingte Formatierung)
      Columns(K:K).Select
      Selection.FormatConditions.Delete
      Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:==keine_Artikeltextdatei_vorhanden
      With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
      End With
    'Hier werden die Zellen so formatiert, daß der Zelleintrag am
    'oberen Zellrand ausgerichtet ist und der Zeilenumbruch aktiviert ist
    'Standard in Excel ist die Ausrichtung unten, was im vorliegenden Fall nicht so toll ist
      Cells.Select
      With Selection
        .VerticalAlignment = xlTop
        .WrapText = True
      End With
      Range(A1).Select
    
    End Sub
    
    Das Makro gleicht folgende menschliche Fehler aus:
    Wenn keine TXT-Datei zu einem der Artikel vorhanden ist, wird das im Textfeld in fetter roter Schrift vermerkt. Du kannst diese Einträge löschen, um das Makro noch einmal durchlaufen zu lassen, wenn du eine Nachlieferung bekommen hast. Wenn du einen Eintrag aktualisieren willst, weil zu einem Artikel eine neue TXT-Datei gekommen ist, mußt du den Text zu diesem Artikel vorher in der Tabelle löschen. Das makro sucht sich selbständig diejenigen Datensätze, die keinen Artikeltext haben.
    Wenn ein Artikeltext doch nicht reinen Fließtext enthält, sondern Tabulatoren oder Zeilenumbrüche enthält, wird der Eintrag so umformatiert, daß er trotzdem in eine einzige Zelle passt.
    Am Ende wird die Haupttabelle noch ein wenig wahrnehmungsfreundlich formatiert.

    Wenn du dir die Mühe machst, das alles durchzuackern und zu verstehen, weißt du schon einen Haufen über Makros.
    Tip: Mach die Haupttabelle auf (Vollbild), dann den VB-Editor (in einem kleingezogenen Fenster!). Klick ins Makro und drück F8. Mit F8, F8, F8, F8 kannst du dann das Makro Schritt für Schritt ablaufen lassen. Mit F5 läuft es in einem Rutsch bis zum Schluß durch.

    Hab ich alles vom Matjes gelernt :)
     
Die Seite wird geladen...

.txt Dateien mit Excelliste zusammenführen - Ähnliche Themen

Forum Datum
EXE-Dateien nach einer Zeit nicht mehr ausführbar Windows 8 Forum Sonntag um 21:21 Uhr
Dateien mit bestimmten Programmen öffnen, z.B. pdf oder jpg Windows 10 Forum 10. Nov. 2016
Nach update fehlen dll Dateien Windows 10 Forum 1. Okt. 2016
Dateien mit bestimmten Programm öffnen Windows 10 Forum 27. Sep. 2016
Jetzt auch dll Dateien betroffen? Windows 10 Forum 20. Sep. 2016