skriptingnoob
Goto Top

VBA-Skript, um aus txt-Dateien eine Calc-Datei zu machen

Hallo zusammen,

bin neu im Forum und über die Suche schon teilweise zu meinem Problem fündig geworden. Wie mein Nickname allerdings verrät, habe ich keine Ahnung von VB-Skripten, Python, Javascript etc..

Ich habe einige import.txt-Dateien, die folgendermaßen aufgebaut sind:

Seminar Zeitmanagement 1
Teilnahmegebühr: €110.25
18 Teilnehmer
Gesamtlizenzen Windows: 5
Seminar Beginnt 2021/09/09 05:12:58 MEZ
Materialkosten: €0

Die Feldwerte sind lediglich in eigenen Zeilen eingetragen, ohne Trennzeichen etc.

Daraus werden soll nach Möglichkeit eine Libreoffice-Calc-Tabelle mit folgendem Aufbau:

Titel Seminar I Teilnehmer I Gebühr I Lizenzen I Materialkosten I Datum/Uhrzeit I

Und als Quelle sollen alle txt-Dateien aus einem bestimmten Ordner dienen, vorhandene Sätze(der Titel ist eindeutig) nach Möglichkeit aber nicht mit importiert werden. Und wenn wir das €-Zeichen noch wegbekommen, bin ich rundum glücklich. Und zukünftig neue Sätze unten anfügen sollte nach Möglichkeit auch gehen. Zur Not kann ich aber nach gewisser Zeit auch einfach eine neue Tabelle daraus machen und die neuen Daten per Copy&Paste unten dranhängen.

Für Excel gibt es ja das Power-Query-Tool, das steht mir aber leider nicht zur Verfügung, weshalb ich das vermutlich mit VBS/VBA machen muss. Habt Ihr da ein paar Tipps und evtl. Code für mich? Bin bisher eher in SQL-Abfragen unterwegs gewesen und dafür eine SQL-DB bauen lohnt glaube ich nicht für ein paar Hundert Dateien.....

Vielen Dank für Eure Hilfe!

Gruß
Tobias

Content-ID: 1273488678

Url: https://administrator.de/contentid/1273488678

Ausgedruckt am: 24.11.2024 um 01:11 Uhr

colinardo
Lösung colinardo 17.09.2021 aktualisiert um 21:53:40 Uhr
Goto Top
Servus Tobias,
mein Vorschlag mach es doch gleich mit der Powershell (falls du unter Windows arbeiten solltest), ist weniger Tipparbeit face-wink.
# Quellordner mit den Textdateien
$folder = 'D:\quelle  
# Ergebnis-CSV-Datei
$result = 'D:\result.csv'  
# Importiere vorhandene CSV falls vorhanden
$csv = @()
if (Test-Path $result){
    $csv = Import-CSV $result -Delimiter ";"  
}
# jede *.txt Datei des Ordners verarbeiten
Get-ChildItem $folder -File -Filter *.txt | %{
    # Inhalt der Datei auslesen
    $content = Get-Content $_.Fullname
    # custom object mit den Daten erstellen und ausgeben und gleichzeitig nur an csv anhängen wenn nicht schon vorhanden
    [pscustomobject]@{
        'Titel Seminar' = $content  
        'Gebühr' = ($content[1] -replace '[^\d+\.]+').replace('.',',')  
        'Teilnehmer' = ($content[2] -replace '[^\d]+')  
        'Lizenzen' = $content[3] -replace '[^\d+]'  
        'Datum/Uhrzeit' = [regex]::match($content[4],'\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}')  
        'Materialkosten' = $content[5] -replace '[^\d\.]'  
    }
} | ?{$_.'Titel Seminar' -notin $csv.'Titel Seminar'} | export-csv $result -Delimiter ";" -Encoding UTF8 -NoType -Append  
Für VBA/VBS habe ich gerade nicht genügend Zeit (bin mit VBA eher unter MS Office unterwegs, den LibreOffice Dialekt müsste ich mir dann nochmal anschauen, kommt auch darauf an unter welchem OS du dies nutzt), wäre aber auch kein großes Problem.

#edit# Hab das ganze nach kurzer Einsicht in die API auch mal als Calc Dokument (*.ods) in LibreOffice Basic programmiert, das Demo-Dokument kannst du hier runterladen:

back-to-topimport_text_files_1273488678.ods


Beim Ausführen kommt als erstes ein Dialog in dem du den Ordner mit den *.txt Dateien wählen kannst.

screenshot

Nicht vergessen die Makro-Sicherheit anzupassen damit die Makros auch laufen.
Extras => Optionen => Sicherheit => Makrosicherheit => mindestens "Mittel" wählen. und dann Calc neu starten.

screenshot

Grüße Uwe