Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

txt.Datei erzeugen, besondere Formatieru

txt.Datei erzeugen, besondere Formatieru
02.03.2022 10:52:14
Herrmann
Guten Morgen liebe Community,
ich möchte gerne anhand meiner Exceltabelle durch ein Button eine txt.Datei erzeugen. Die txt.Datei muss ich später in ein anderes Tool uploaden und braucht deswegen eine besondere Formatierung.
Excel Datei: Ich habe ein Beispiel-Exceldatei erstellt wie meine Tabelle ungefähr aussieht.
Der Kollege trägt sich dort seine Anfangs- und Endzeit, Pause und Kommentare ein. Außerdem trägt er unter den vorgeschriebenen Aufgaben (z.B. Aufgabe 1), die eine Kennnummer beinhalten ('5874569716329), den Aufgabentyp anhand einer Nummer ein (0061), die jeweilige gebrauchte Stunde (3) und ein zusätzlichen Kommentar (Dokumentenpflege). Oben habe ich ein Button eingefügt das dadurch die txt.Datei erzeugen soll.
https://www.herber.de/bbs/user/151504.xlsx
Txt.Datei: Außerdem habe ich eine Beispiel-txt.Datei erstellt um das Ergebnis zu veranschaulichen. Die erzeugte txt.Datei muss ein reiner Text sein, wie die erste Zeile.
https://www.herber.de/bbs/user/151505.txt
BITTE ACHTUNG; die unterstriche „ _ ‘‘ habe ich zur Vereinfachung eingefügt, um die unterschiedlichen Felder auszudrücken. Der Erzeugung soll also wie in der ersten Zeile aussehen :
RNNST0000000154128765 0507202005072020000003H APL-XX000004L72 58745697163 0061 Dokumentenpfl*
Ich beschreibe das Beispiel anhand der Zeile 6 in der Excel Datei und die erste Zeile der txt.Datei
unterschiedlichen Felder: Das erste Feld darf nur 2 Zeichen enthalten "RN". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden.
Das zweite Feld darf nur 1 Zeichen enthalten "N". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden.
Das dritte Feld darf nur 2 Zeichen enthalten "ST". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden.
Das vierte Feld darf nur 8 Zeichen enthalten "00000001" und soll eine fortlaufende Nummer sein (siehe txt.Datei erstellen: 1 bis 4 nach "ST") . Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden.
Das fünfte Feld darf nur 10 Zeichen enthalten "54128765 ". Dies ist die Personalnummer in der Exceldatei (D2:E2) zu finden. Wenn es nur 8 Zeichen wie in unserem Beispiel hat, dann soll dahinter 2 Leerzeichen erzeugt werden
Das sechste und siebte Feld darf nur 8 also 16 Zeichen enthalten "0507202005072020". Dies ist das Datum wiederholt in der Exceldatei (B6) zu finden
Das achte Feld darf nur 6 Zeichen enthalten "000003". Dies ist die Stunde in der Exceldatei (J6) zu finden. Bei 10 Stunden wäre es dann "000010".
Das neunte Feld darf nur 3 Zeichen enthalten "H ". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden. Es drückt sozusagen die Einheit der Stunde aus. Wenn es nur 1 Zeichen wie in unserem Beispiel hat, dann soll dahinter 2 Leerzeichen erzeugt werden
Das zehnte Feld darf nur 8 Zeichen enthalten "APL-XX00". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden.
Das elfte Feld darf nur 4 Zeichen enthalten "0004". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden.
Das zwölfte Feld darf nur 6 Zeichen enthalten "L72 ". Dies ist nicht in der Exceldatei zu finden und soll zusätzlich erzeugt werden. Wenn es nur 3 Zeichen wie in unserem Beispiel hat, dann soll dahinter noch 3 Leerzeichen erzeugt werden.
Das dreizehnte Feld darf nur 12 Zeichen enthalten "58745697163 ". Dies ist die Kennnummer der Aufgabe in der Exceldatei (I5:K5) zu finden und wenn es nur 10 Zeichen wie in unserem Beispiel hat, dann soll dahinter noch 2 Leerzeichen erzeugt werden.
Das vierzehnte Feld darf nur 4 Zeichen enthalten "0061". Dies ist der Aufgabentyp, welches durch eine Nummer beschrieben wird und ist in der Exceldatei (I6) zu finden.
Das fünfzehnte Feld soll nur 4 Leerzeichen " " enthalten.
Das sechszehnte Feld darf nur 14 Zeichen enthalten "Dokumentenpfl*". Dies ist das Kommentar in der jeweiligen Aufgabe in der Exceldatei (K6) zu finden. Das Feld soll als 14.tes Zeichen ein * enthalten
Die Felder, wie z.B. "RN" oder "H " also die zusätzlich erzeugten, sind IMMER gleich und werden nie verändert.
Ich hoffe ich konnte es ausführlich genug beschreiben und würde mich über jede Hilfe freuen.
LG

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: txt.Datei erzeugen, besondere Formatieru
02.03.2022 13:31:34
UweD
Hallo
versuch das mal... in ein Modul und dann mit deinem Button verknüpfen

Sub TT()
Dim Pfad As String, Datei As String, Z1 As Integer, LR As Long
Dim Wert As String, i As Long, j As Integer, Nr As Long
Dim Sp1 As Integer, Anz As Integer, WF
Pfad = "E:\Excel\Temp\" 'mit \ am Ende
Datei = "Ausgabe.txt"
Z1 = 6 'beginne ab Zeile
Sp1 = 9 'Start ab Spalte I
Set WF = WorksheetFunction
LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
Close #1
Open Pfad & Datei For Output As 1
Anz = WorksheetFunction.CountA(Rows(Z1 - 1)) 'Anzahl aufgaben
For i = Z1 To LR
For j = Sp1 To Sp1 + (Anz - 1) * 3 Step 3
If Cells(i, j)  "" Then
Wert = "RN" '1) fix
Wert = Wert & "N" '2) fix
Wert = Wert & "ST" '3) fix
Wert = Wert & Format(Nr + 1, "00000000") '4) laufende Nummer
Wert = Wert & Range("D2") & WF.Rept(" ", 10 - Len(Range("D2"))) '5) Personalnummer plus Leerzeichen
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '7) Datum2
Wert = Wert & Format(Cells(i, j + 1), "000000") '8) Stunde
Wert = Wert & "H  " '9) H plus Leerzeichen
Wert = Wert & "APL-XX00" '10) fix
Wert = Wert & "0004" '11) fix
Wert = Wert & "L72   " '12) fix plus Leerzeichen
Wert = Wert & Cells(Z1 - 1, j) & WF.Rept(" ", 12 - Len(Cells(Z1 - 1, j))) '13) Aufgabe +Leerzeichen
Wert = Wert & Format(Cells(i, j), "0000") '14) Aufgabentyp
Wert = Wert & "    " '15) fix 4 Leerzeichen
Wert = Wert & Left(Cells(i, j + 2), 13) & "*" '16) Kommentar
Nr = Nr + 1
Print #1, Wert
End If
Next j
Next i
Close #1
End Sub
Aufgefallen ist mir, dass in deiner Beispieldatei hinter Feld 9 zusätzlich 3 Leerzeichen stehen. Laut Beschreibung sollen es H plus 2 sein
Ebenso die erste Aufgabennummer weicht ab
LG UweD
Anzeige
Danke!
02.03.2022 13:57:42
Herrmann
Hallo UweD,
purer Wahnsinn, danke!
LG
Update:
02.03.2022 14:04:41
UweD
Der Kommentar ist nun immer 14 stellig

Sub TT()
Dim Pfad As String, Datei As String, Z1 As Integer, LR As Long
Dim Wert As String, i As Long, j As Integer, Nr As Long
Dim Sp1 As Integer, Anz As Integer, WF, Lng As Integer, Leer As String
'*** Vorgaben
Pfad = "E:\Excel\Temp\" 'mit \ am Ende
Datei = "Ausgabe.txt"
Z1 = 6 'beginne ab Zeile
Sp1 = 9 'Start ab Spalte I
'*** Ende Vorgaben
Set WF = WorksheetFunction
LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
Close #1
Open Pfad & Datei For Output As 1
Anz = WorksheetFunction.CountA(Rows(Z1 - 1)) 'Anzahl Aufgaben
For i = Z1 To LR
For j = Sp1 To Sp1 + (Anz - 1) * 3 Step 3 'von Spalte I bis O
If Cells(i, j)  "" Then  'nur, wenn nicht leer
Wert = "RN"                                     '1) fix
Wert = Wert & "N"                               '2) fix
Wert = Wert & "ST"                              '3) fix
Wert = Wert & Format(Nr + 1, "00000000")        '4) laufende Nummer
Lng = Len(Range("D2"))
Leer = WF.Rept(" ", 10 - Lng)
Wert = Wert & Range("D2") & Leer                '5) Personalnummer plus Leerzeichen
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '7) Datum2
Wert = Wert & Format(Cells(i, j + 1), "000000") '8) Stunde
Wert = Wert & "H  "                             '9) fix plus Leerzeichen
Wert = Wert & "APL-XX00"                        '10) fix
Wert = Wert & "0004"                            '11) fix
Wert = Wert & "L72   "                          '12) fix plus Leerzeichen
Lng = Len(Cells(Z1 - 1, j))
Leer = WF.Rept(" ", 12 - Lng)
Wert = Wert & Cells(Z1 - 1, j) & Leer           '13) Aufgabe +Leerzeichen
Wert = Wert & Format(Cells(i, j), "0000")       '14) Aufgabentyp
Wert = Wert & "    "                            '15) fix 4 Leerzeichen
Lng = Len(Left(Cells(i, j + 2), 13))
Leer = WF.Rept(" ", 13 - Lng) & "*"
Wert = Wert & Left(Cells(i, j + 2), 13) & Leer  '16) Kommentar immer 13 +*
Print #1, Wert
Nr = Nr + 1 'neue Laufnummer
End If
Next j
Next i
Close #1
MsgBox "Fertig"
End Sub
LG UweD
Anzeige
AW: Update:
02.03.2022 14:13:36
Herrmann
Vielen dank auch dafür, sieht prima aus.
Ich werde es demnächst auf die Orgnialdatei übertragen. Mit der Beispieldatei funktioniert es sehr gut!
LG
Erweiterung möglich?
08.03.2022 08:41:27
Herrmann
Hallo Zusammen, Hallo UweD
ich möchte gerne an den Makros noch eine Änderung vornehmen und bitte um eure Hilfe.
- Im 13. Feld habe ich versucht, die Kennnummer als "R.2022-HH-9732" (I5:K5) zu schreiben und wird nicht übernommen sondern es wird nur eine reine Zahl (zb. wie L5:N5) wiedergegeben.
- Das 8.,14. und 16. Feld hat manchmal ein Zeilenumbruch (siehe L7, M7, N7). WENN ein Zeilenumbruch vorhanden ist, soll das Makro eine zusätzliche Reihe erzeugen. (siehe Beispiel txt.Datei Zeile 4)
- Da ich eine Exceldatei verwende, die über das ganze Jahr gepflegt wird, ist die Erstellung der txt.Datei von Januar nicht mehr relevant, da ich es ende des Monats schon erstellt habe. D.h, wenn ich die Datei im Anfang April erzeugen möchte, soll es mir bitte nur den März ausspucken bzw. die letzten 30/31 Tagen.
Die Beispieldatei mit dem obrigen Makro: https://www.herber.de/bbs/user/151619.xlsm
Die Beispiel- gewünschte txt.Datei, wie es aussehen soll: https://www.herber.de/bbs/user/151618.txt
Ich bedanke mich im Vorfeld für die Unterstützung.
LG
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige