Daten aus .txt in spezielle .xlsx übernehmen
#1
Hallo ihr Lieben,

könnt ihr mir bitte helfen?
Ich habe Daten in einer .txt Datei und möchte diese in eine vorgefertigte .xlsx Datei übernehmen.
Ich weiß, dass es einfach mit kopieren der einzelnen Spalten geht, aber geht das vielleicht auch automatisch?
Denn diese Dateien können sehr umfangreich sein.

Zusätzlich soll bei den Kontierungen in der Spalten FIPOS - wenn die Kontonummer 7 stellig ist T-XXXXXX- voran gesetzt werden.
und in der Spalte SHKZG - wenn im .txt 50 steht - soll in dieser Spalte H stehen
und  wenn im .txt 40 steht - soll in dieser Spalte S stehen

Beispieldateien im Anhang

Vielleicht hat jemand von euch eine Idee :)

Bitte - Danke :)


Angehängte Dateien
.txt   Kopie.TXT (Größe: 17,89 KB / Downloads: 48)
.xlsx   TEST.xlsx (Größe: 12,03 KB / Downloads: 20)
Antworten Top
#2
Hallo,

ist doch ein dankbare Aufgabe für PowerQuery. Da kannst du alles deinen Wünschen entsprechend mit der Maus zusammenstellen.

Knobbi38
[-] Folgende(r) 2 Nutzer sagen Danke an knobbi38 für diesen Beitrag:
  • ws-53, marilin837
Antworten Top
#3
(08.10.2025, 13:42)knobbi38 schrieb: ist doch ein dankbare Aufgabe für PowerQuery. Da kannst du alles deinen Wünschen entsprechend mit der Maus zusammenstellen.

...smile... im Prinzip schon, wenn man genaueres wüßte. In Zeile3, Spalte 2 des mit PQ importierten Textes finde ich das:

00          /              /              /              / //  96330    La12345671  /  /      /      / /                /Kassaabschluss 2025-07-31-Einnahmen              / /              /              /  /  /    /  /    /  //        /  /  //      //      / /          /  /      /  /              /        ///    /  /  /      /      /                //                                  /                                  /                                  /                                  /                                  /                                  /        /  /  /              /  /                /      //  /                  //        /        /8154540          /  /                /        /        /            //  /              /              /            /        /          /          /  /        /                      / /              /        /  /          /          //    /        /  /      //  2-010005-8154540        // /  //            ...

In den Zeilen 4ff  fehlt schon die 96330. Nicht so schlimm, man kann ja die Position von "La" suchen
Was aber unklar ist, ist KOSTL immer 96330? Beginnt AUFNR immer mit La
Aber richtig schlimm wird es bei FIPOS... Da fällt mir nur wenig dazu ein....
Schickt den, der die Textdatei verbrochen hat in die Wüste und lasst einen ran, der die Daten vernünftig strukturieren kann...
Oder... Du erklärst uns mal das genaue Prinzip der Struktur.... ich werde jedenfalls nicht die / oder Zeichen zählen und zeilenweise miteinander vergleichen... weder manuell noch automatisiert...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#4
Hallo,

hier mal ein Ansatz, soweit mein Lust gereicht hat...


.xlsx   Mappe2.xlsx (Größe: 19,23 KB / Downloads: 7)
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Hallo

Wie Ralf schon angemerkt hat, sind die Daten in deiner .TXT inkonsequent


Ich hatte schon angefangen, aber es läuft halt bei den schiefen Daten in Fehler hinein (sofort bei Satz2)

Solltest du die Daten richtig gestellt bekommen könnte das so gehen...

Code:
Option Explicit

Sub ImportiereTxtMitTrennung()
    Dim dateiPfad As String
    Dim zeile As String
    Dim teile() As String
    Dim zeilenNr As Long
    Dim fso As Object
    Dim f As Object
   
    ' >>> Pfad zur Textdatei anpassen <<<
    dateiPfad = "E:\Excel\Temp\Kopie.txt"
   
    ' Datei öffnen
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(dateiPfad, 1)
   
    With ThisWorkbook.Sheets("Upload")
        'Reset
        .UsedRange.Offset(1, 0).ClearContents
       
        zeilenNr = 2
   
        ' Jede Zeile lesen
        Do Until f.AtEndOfStream
                zeile = f.ReadLine
                ' Trennung nach "/"
                teile = Split(zeile, "/")
                If zeilenNr > 3 Then 'ersten beiden Zeilen werden nicht benötigt
               
                    ' Beispiel: Nur bestimmte Spalten übernehmen
                        If Right(teile(0), 2) = 50 Then
                            .Cells(zeilenNr, 1).Value = "H"
                        ElseIf Right(teile(0), 2) = 40 Then
                            .Cells(zeilenNr, 1).Value = "S"
                        End If
                       
                        If Len(Trim(teile(97))) = 7 Then
                            .Cells(zeilenNr, 2).Value = "T-" & Trim(teile(97))
                        Else
                            .Cells(zeilenNr, 2).Value = Trim(teile(97))
                        End If
                       
                        .Cells(zeilenNr, 3).Value = --Trim(teile(3))
                        .Cells(zeilenNr, 4).Value = Split(Application.Trim(teile(9)), " ")(0)
                        .Cells(zeilenNr, 5).Value = Split(Application.Trim(teile(9)), " ")(1)
                        .Cells(zeilenNr, 6).Value = Trim(teile(17))
                        If Trim(teile(15)) <> "" Then
                            .Cells(zeilenNr, 7).Value = Trim(teile(15)) & "/" & Trim(teile(16))
                        End If
                       
                       
                       
                    End If
            zeilenNr = zeilenNr + 1
        Loop
        .Rows("2:3").Delete
   
    End With
   
    f.Close
    MsgBox "Import abgeschlossen!"
End Sub
Antworten Top
#6
Moin

Die ersten beiden Zeilen sehe ich als Kopf-Zeilen, für die andere Regeln gelten und habe sie erst mal weggelassen.
Wenn ich davon ausgehe dass / das Trennzeichen ist, ist der Rest auch nicht stimmig. Es gibt Verschiebungen.
Arbeitsblatt mit dem Namen 'Kopie (2)'
CDE
1Column2.2Column2.3Column2.4
260,00
345110,00
4324,00
5700,00
6253,80
764,00
8188,80
92,10
1043,00
11219,00
1237,60
1337,50
1461,50
15605,70
161543,70
174250,70
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg

Arbeitsblatt mit dem Namen 'Kopie (2)'
KL
1Column2.10Column2.11
296330    La12345671
3La12345671
4La12345671
5La12345671
6La12345671
7La12345671
8La12345671
9La12345671
10La12345671
11
12
13
14
15
16
17
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg

Arbeitsblatt mit dem Namen 'Kopie (2)'
QRS
1Column2.16Column2.17Column2.18
2Kassaabschluss 2025-07-31-Einnahmen
3Kassaabschluss 2025-07-31-Einnahmen
4Kassaabschluss 2025-07-31-Einnahmen
5Kassaabschluss 2025-07-31-Einnahmen
6Kassaabschluss 2025-07-31-Einnahmen
7Kassaabschluss 2025-07-31-Einnahmen
8Kassaabschluss 2025-07-31-Einnahmen
9Kassaabschluss 2025-07-31-Einnahmen
10Kassaabschluss 2025-07-31-Einnahmen
11AA108230002991Kassaabschluss 2025-07-31-Einnahmen
12AA108230002994Kassaabschluss 2025-07-31-Einnahmen
13AA108230002993Kassaabschluss 2025-07-31-Einnahmen
14AA108230002992Kassaabschluss 2025-07-31-Einnahmen
15Kassaabschluss 2025-07-31-Einnahmen
16Kassaabschluss 2025-07-31-Einnahmen
17Kassaabschluss 2025-07-31-Einnahmen
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg

Arbeitsblatt mit dem Namen 'Kopie (2)'
BRBSBT
1Column2.69Column2.70Column2.71
28154540
38154540
48154540
58154540
68154540
78176024
88154548
98360732
108360732
116670545
126670545
136670545
146670545
155670504
165670506
172000650
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg

Arbeitsblatt mit dem Namen 'Kopie (2)'
CUCV
1Column2.98Column2.99
22-010005-8154540
32-010005-8154540
42-040005-8154540
52-030005-8154540
62-070005-8154540
72-090005-8176024
82-092005-8154548
92-922205-8360732
102-987205-8360732
11
12
13
14
15
16
17
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg

Und dazwischen gibt es haufenweise "leere" Spalten (mal null, mal leer). Es ist unklar ob diese Spalten einfach entfernt werden dürfen.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#7
Könnte diese Annahme stimmen
0K... → Kopfdatensatz (z. B. Kassenkopf oder Exportkopf)
1FB... → Beleg- oder Tagesabschlusskopf
2ZA... → Bewegungsdatensätze (Zeilen mit Buchungen, Einnahmen usw.)

Code:
let
    Quelle = Text.FromBinary(File.Contents("Kopie.TXT"),TextEncoding.Ascii),
    Zeilen = Lines.FromText(Quelle),
    Tabelle = Table.FromList(Zeilen, Splitter.SplitByNothing(), {"Rohzeile"}),
    Satzart = Table.AddColumn(Tabelle, "Satzart", each Text.Start([Rohzeile], 2)),
    Bewegungen = Table.SelectRows(Satzart, each [Satzart] = "2Z"),
    Getrimmt = Table.AddColumn(Bewegungen, "Clean", each Text.Trim(Text.Replace([Rohzeile], "  ", " "))),
    Gesplittet = Table.SplitColumn(Getrimmt, "Clean", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv)),
    Getrimmt2 = Table.TransformColumns(Gesplittet, List.Transform(Table.ColumnNames(Gesplittet), each {_, Text.Trim, type text}))
in
    Getrimmt2
Frage ist allerdings, die wohl unbeantwortet bleiben wird: Gibt es auch Zeilen mit 1ZAJeG, 3ZAJeG, 4ZAJeG usw.?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste