tomilai
Goto Top

Mehrere CSV Dateien nach Zelleninhalt umbenennen und in einer XLS neben einander setzen mit einer Batch Datei

Hallo zusammen,

ich lade einige CSV Dateien um eine Aussage bezüglich Wachstum, Preise..zu treffen. Das Problem dabei ist, dass die CSV Dateien separat sind. Man muss sie in einem XLS-Datenblatt stellen um damit weiterarbeiten zu können. Das zweite Problem: Die CSV-Dateien haben alle einen Standardnamen.
Ich habe es mir so vorgestellt, eine Batch datei zu schreiben, die:

1- die CSV- Dateien nach Zelleninhalt umzubenennen. Es soll aus "Maße" und "Seriennummer" bestehen (siehe Bild: 1 )
Vorsicht: In der Seriennummer gibt es einen Schrägstrich. Es soll durch einen Unterstrich ersetzt werden. Danach kommt eine Ziffer, und nach dieser Ziffer möchte ich einen unterstrich setzen. An dieser Stelle kommen manchmal einige Ziffern/Buchstaben und manchmal nicht. Wenn sie da sind, muss man sie behalten und danach einen Unterstrich setzen. Ansonsten wenn sie nicht da sind, muss man einfach den unterstricht setzen. Jetzt kommen die "Maße" hinten dran um den Titel zu Vervollständigen.

z.B.: Original Maße = 23x17x5 Serienn. = 45698/4 XYZ
Gewünschter Titel aus dieser Kombi==> 45698_4_XYZ_23x17x5

2- CSV- Dateien sehen wie im Bild 1 aus.
Sie müssen mit Hilfe des gleichen Batches in einer einzigen XLS Tabelle zusammengeführt werden.
Dabei:
- müssen die einzelnen Tabellen NEBEN EINANDER stehen (nicht unter einander).
- Von der ersten Tabelle müssen nur die ersten zwei Spalten übernommen werden.
- Von den weiteren Tabellen braucht man nur die Spalte mit den Zahlen (2. Spalte).
- Das Endergebnis soll wie im Bild 2 aussehen.

Ich bin sehr dankbar für jede Hilfe

Viele Grüße
Thomas
1
2

Content-Key: 380200

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

Printed on: April 18, 2024 at 23:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R Jul 14, 2018 at 08:35:51 (UTC)
Goto Top
Moin,

du hast hier zwar schön deine Aufgabe aufgeschrieben, aber womit hast du nun begonnen wobei du hilfe brauchst?

VG
Member: Penny.Cilin
Penny.Cilin Jul 14, 2018 at 08:42:00 (UTC)
Goto Top
Hallo,

ich denke daß kann man mit Excel VBA lösen. Batchprogrammierung ist dazu denkbar ungeeignet.
Auch ich stelle die Frage: Was hast Du bisher begonnen, Code?

Gruss Penny
Member: Tomilai
Tomilai Jul 14, 2018 updated at 18:25:51 (UTC)
Goto Top
Hi H41mSh1C0R,

Ich hab erst mal begonnen die CSV Dateien umzubenennen und ggf. in XLSX Dateien zu konvertieren, was nicht funktioniert hat. (Das Konvertieren ist nicht so wichtig, aber das Umbenennen schon.)
Die CSV Dateien befinden sich in einem Ordner und ich möchte sie im Ordner umbenennen. Ich konnte sie in einer Arbeitsmappe umbenennen mit VBA, aber das ist nicht das erwünschte Ergebnis, sie sollen im Ordner umbenannt werden.

Danke und viele Grüße
Thomas
Member: Tomilai
Tomilai Jul 14, 2018 at 18:24:46 (UTC)
Goto Top
Hi Penny.Cilin,

Excel VBA ist sicherlich geeignet für den zweiten Teil (Tabellen neben einander platzieren). Ich wusste nicht ob die VBA beim Umbenennen vom Ordnerinhalt helfen könnte.

Danke und viele Grüße
Thomas
Member: Pjordorf
Pjordorf Jul 15, 2018 updated at 09:30:34 (UTC)
Goto Top
Hallo,

Zitat von @Tomilai:
in XLSX Dateien zu konvertieren, was nicht funktioniert hat.
Das kann doch mittels Excekl gemacht werden. Und da einCSV keinerlei Formatierungen, Formeln oder sonstwas beeinhalten, sollte eine einfaches XLS (X) Datei dabei heraus kommen.Also, was hat da nicht funktioniert?

Die CSV Dateien befinden sich in einem Ordner und ich möchte sie im Ordner umbenennen.
Mittels BATCH oder VBA sehr wohl machbar. suche nutzen
Batch - Dateinamen auslesen, umbenennen + dreistellige Zahl vor bisherigen Dateinamen setzen.
Batch-Dateien: Unterverzeichnisse auslesen und Dateien umbenennen
Dateienamen in Ordnernamen umbenennen
Per VBA im Verzeichniss dateien mit Wildcard umbenennen
VBA - VBS : Umbennen und Verschieben von Dateien in Loop
Mehrfach umbenennen per Batch

Excel VBA ist sicherlich geeignet für den zweiten Teil (Tabellen neben einander platzieren). Ich wusste nicht ob die VBA beim Umbenennen vom Ordnerinhalt helfen könnte. Schleifen Anfang, CSV Datei Öffnen, Daten auslesen und Namen zusammenbauen, CSV Datei schliessen, CSV Datei umbenennen, Schleife Fertig wenn alle Dateien (welche in Frage kommen - kriterium) umbenannt wurden
Mit Excel VBA kann auch der erste Teil (umbenennen von Dateien) gemacht werden.
https://stackoverflow.com/questions/48006115/rename-all-files-in-a-folde ...
https://stackoverflow.com/questions/26824225/loop-through-folder-renamin ...
https://www.extendoffice.com/documents/excel/2339-excel-rename-files-in- ...

Sogar Powershell ist dazu geeignet...

Gruß,
Peter
Member: Tomilai
Tomilai Jul 15, 2018 at 18:32:54 (UTC)
Goto Top
Hallo Peter,

danke für deinen Beitrag.

Zitat von @Pjordorf:

Das kann doch mittels Excekl gemacht werden. Und da einCSV keinerlei Formatierungen, Formeln oder sonstwas beeinhalten, sollte eine einfaches XLS (X) Datei dabei heraus kommen.Also, was hat da nicht funktioniert?


Manuel geht das wohl. Mein Problem: ich möchte es automatisieren, z.B. eine Batch- oder vbs, vba Datei erstellen, die nichts anders macht als die CSV Dateien in Excel zu konvertieren.

Zitat von @Pjordorf:

Die CSV Dateien befinden sich in einem Ordner und ich möchte sie im Ordner umbenennen.


Der Name, der eingesetzt werden soll, befindet sich immer in der gleichen Zelle jeder Excel Tabelle (z.B. B12). Ich habe keine Namensliste.

Es ist eine Menge Dateien und sie manuell zu bearbeiten nimmt einfach viel zeit in Anspruch, deswegen möchte ich es automatisieren, denn es sind immer die gleichen Schritte zu folgen.

ich habe noch nie was mit Powershell gemacht. Wenn Du einen Powershell script, der das macht parat hast, kann ich es gerne austesten.

Vielen Dank und schöne Grüße
Thomas
Member: Pjordorf
Pjordorf Jul 15, 2018 at 20:47:41 (UTC)
Goto Top
Hallo,

Zitat von @Tomilai:
Manuel geht das wohl. Mein Problem: ich möchte es automatisieren, z.B. eine Batch- oder vbs, vba Datei erstellen, die nichts anders macht als die CSV Dateien in Excel zu konvertieren.
Das sist schon klar, aber dir ist der Unterschied zwischen einer .csv und einer.xls(x) Datei klat? In einer CSV sind nur deine Daten und evtl. eine Zeilen mit den Spaltennamen. In einer .xls(x) sind Excel Header und Formatierungen , Drucker usw. alles enthalten, daneben sid auch deine daten soweie Formeln usw. enthalten. Das ist nicht einfach nur Konvertieren, sondern ein Import nach Excel und Speichern unter... Dadrauf bezog sich doch dein Funktioniert nicht und ich fragte was nicht funktionierte.

Der Name, der eingesetzt werden soll, befindet sich immer in der gleichen Zelle jeder Excel Tabelle (z.B. B12). Ich habe keine Namensliste.
Machs mit VBA. Du kannst auch den Makro Rekorder nutzen damit du du deine Ersten Schritte damit machst und gezielte Fragen dann hier rein stellen. Lernen musst du schon selbst, oder einen Dienstleister entlohnen der es für dich macht.

Es ist eine Menge Dateien und sie manuell zu bearbeiten nimmt einfach viel zeit in Anspruch,
Auch das ist Klar, und es ist auch ne menge Zeit die ins VBA gesteckt wird.

Gruß,
Peter
Member: colinardo
colinardo Jul 16, 2018 updated at 11:23:53 (UTC)
Goto Top
Mit VBA habe ich das hier schon ich weis nicht mehr wie oft gezeigt, findest du in meinen Beiträgen zu CSV Dateien en masse ...

Da du hier leider keinen Raw-Output deiner CSV-Dateien zur Verfügung stellst, gehe ich von folgendem Format deiner CSV-Dateien anhand der Excel-Bilder aus :
Info;
;Zahl
Gewicht;123
Maße;23x44x22
Umfang;634
Volumen;3345
Type;22-345
Seriennummer;45698/4 XYZ
Einnahme;3322
Ausgabe;2111
Passend dazu folgendes Powershell-Skript das die Daten vernünftig transponiert als CSV zusammenfasst welche du dann mit Excel fertig öffnen kannst:
Ordner in Zeile 1 und Ausgabepfad in Zeile 2 anpassen, fertig.
$folder = 'D:\Daten'  
$output = "D:\merged.csv"  
$all = @()
gci $folder -Filter *.csv -File | %{
    [string[]]$content = gc $_.Fullname | select -skip 2
    $delim = [regex]::match($content,'^("[^"]*"|[^,;]+)\s*([,;\t])').Groups[2].Value  
    $obj = [pscustomobject]@{}
    ($content -replace $delim,"=" | ConvertFrom-StringData) | %{$_.GetEnumerator() | %{Add-Member -InputObject $obj -MemberType NoteProperty -Name $_.Key -Value $_.Value}}  
    $all +=$obj
    $_ | rename-item -NewName "$($obj.Seriennummer -replace '[/\s]+','_')_$($obj.Maße)$($_.Extension)" -Force -verbose  
}
$all | export-csv $output -Delimiter $delim -NoType -Encoding UTF8

Mehr Support gibts gerne gegen Aufwandsentschädigung via PN .

Grüße Uwe
Member: Tomilai
Tomilai Jul 16, 2018 at 17:31:27 (UTC)
Goto Top
Hallo Peter,

vielen Dank für die nette und konstruktive Antwort. Es ist mir klar was eine CSV datei ist, und wie sie sich von einer Exceldatei unterscheidet, sonst wozu würde ich die Konvertierung brauchen (Deiner Meinung nach)?

Das Makro-Rekord ist auch klar, war aber als zweiter Schritt geplant (nachdem die Konvertierung abgeschlossen ist).

Hintergrund der Frage überhaupt war: Es kann sein, dass jemand das gleiche (oder ein ähnliches) Problem kennt, und eine Lösung bzw. einen Hinweis hat, der einem weiter bringen kann.

An das Entlohnen eines Dienstleisters habe ich irgendwie nicht gedacht face-smile Kennst Du vlt. einen? Diesen guten Hinweis habe ich gesucht, Danke face-wink

Viele Grüße Peter und Danke noch mal für Deiner Bemühungen
Thomas
Member: Tomilai
Tomilai Jul 16, 2018 at 17:40:41 (UTC)
Goto Top
Hallo Uwe,

danke für Deinen Support. Das Skript liefert ein falsches Ergebnis. Ich versuche es zu modifizieren und checke dann das Resultat. Danke Dir noch mal.

VG
Thomas
Member: colinardo
colinardo Jul 16, 2018 updated at 19:43:33 (UTC)
Goto Top
Zitat von @Tomilai:
. Das Skript liefert ein falsches Ergebnis.
Nun, mit den vorliegenden Daten finde ich liefert es ein sogar besser wartbares als du oben vor hast, nämlich in Zeilenform. Gerade bei vielen CSV Dateien wesentlich besser als die Spalten-Variante von dir. Willst du die Daten anders rum brauchst du das Ergebnis in Excel nur durch die transponieren Funktion jagen, ganz einfach face-smile.
Member: Pjordorf
Pjordorf Jul 16, 2018 at 21:32:29 (UTC)
Goto Top
Hallo,

Zitat von @Tomilai:
Das Skript liefert ein falsches Ergebnis.
Gemauso wie dein Konvertieren nicht funktioniert, lieferst du keinen Hinweis auf den Fehler, das Fehlerbild noch irgendwelche Fehlermeldung noch sonst etwas was uns über deinen erhaltenen Fehler etwas aussagt als "Ich hab Fehler, nun sucht ma schön"....

Gruß,
Peter