Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Batch-Datei um Excel-Datei in Text-Datei zu wandeln

Mitglied: 52028
Hallo zusammen,

nach nun 3-stündiger Suche und vergeblichen Bemühungen trage ich mein Problem mal in die Öffentlichkeit.

Die Problemstellung sieht wie folgt aus. Ich habe eine Excel-Datei mit >30 Spalten und mehreren 1000 Einträgen. (Auch mehrere Tabellenblätter, die interessieren aber nicht!). Ich möchte nun gern die ersten 7 Spalten der Datei in ein pipe-getrenntes Text-File speichern.

Das ganze soll automatisch ablaufen, daher die Idee als Batch-Skript. (Falls es eine elegantere, bzw. weniger aufwändigere Lösung gibt, könnt ihr mir die auch gerne verraten!) ;)

Ich bin bereits darauf gestoßen, dass es schwierig wird das Excel-File direkt zu verarbeiten und habe auch schon den Weg über eine *.CVS-Datei gefunden. Damit wäre der erste Ansatzpunkt ja, das Excel-Sheet automatisch in eine Simikolon-getrennte *.CSV-Datei zu wandeln.

Danach möchte ich dann die CSV-Datei per batch-Verarbeitung in eine Textdatei wandeln. Mein Ansatz hierzu sieht in etwa so aus:


Das Problem an dieser Stelle ist, dass
  • das Simikolon-Trennzeichen der CSV übernommen wird (Ich brauche eine Pipe)
  • nur die erste Spalte in die Textdatei geschrieben wird

Ich hoffe ich konnte mein Problem erläutern und das ihr mich auf den richtigen Weg bringt! :) face-smile

Content-Key: 66208

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

Ausgedruckt am: 26.07.2021 um 00:07 Uhr

Mitglied: Biber
Biber 14.08.2007 um 21:10:49 Uhr
Goto Top
Moin MarcoS,

>
[code]
FOR /F "tokens=1-7 delims=;" %%a IN (meineCSV.csv) DO echo %%a >> meineTXT.txt
[/code]

Das Problem an dieser Stelle ist, dass
1. Das Simikolon-Trennzeichen der CSV übernommen wird (Ich brauche eine Pipe)
2. Nur die erste Spalte in die Textdatei geschrieben wird


"Problem" ist ein großes Wort...
In der FOR/F-Anweisung willst Du ja die ersten 7 Spalten "erhalten" (tokens 1-7).
Dann musst Du entsprechend auch die dynamischen Variablen %%a...%%g weiterreichen.
Das Trennzeichen "|" musst Du mit einem Caret ("^") maskieren, da es unter Batch eine Steuerzeichen-Bedeutung hat.


Grüße
Biber
Mitglied: 52028
52028 14.08.2007 um 23:29:34 Uhr
Goto Top
Super, Vielen Dank für die rasche Antwort. Ich habe jetzt gerade leider keine Möglichkeit das auszuprobieren. Gebe aber Rückmeldung sobald ich das getan habe.

Gibt es auch eine Möglichkeit Excel-Dateien direkt zu verarbeiten, oder ist der Zwischenschritt über eine CVS-Datei zwingend notwendig. Vielleicht gibt es kleine Freeware-Tools die diesen Schritt bewerkstelligen und die man einbinden kann.

Aber wie gesagt, ich habe leider keine Möglichkeit das gerade zu testen, sondern kann mich im Moment nur "schlau"-lesen! ;)

Ich habe bisher auch noch gar keine Erfahrung auf diesem Gebiet, kann mir jemand gute Literatur oder Quellen zeigen die sich mit dem Thema beschäftigen? Vor allem die grundsätzliche Syntax interessiert mich.

Viele Grüße!
Mitglied: Biber
Biber 15.08.2007 um 01:12:25 Uhr
Goto Top
Moin marcos,

klar gibt es mögliche Varianten und Wege der Verfeinerung und Automatisierung.
Wahrscheinlich ist allerdings Dein Sachverhalt doch so off road, dass es auch bei Zuhilfenahme eines Freeware-Utilities eher holprig bleibt.
Ich würde in dem Fall, dass Du (aus welchen Gründen auch immer)
  • die Daten in der Excel-Tabelle erzeugst, hast oder pflegst
  • und regelmäßig dieses Export-Format mit den "|"-Trennzeichen brauchst
---> dann drück die Daten über einen Excel-VBA-Makro raus.
So etwas wird hier im Forum meist in wenigen Stunden entwickelt....

Falls Du vorher dennoch selbst auf die Suche nach Utilities gehen willst - vielleicht gibt es ja einen Standalone XLSToCSV-Converter- dann suche nach "CSV" (Comma Separated Values).
Die Abkürzung CVS ist mittlerweile genauso bekannt unter IT-Entwicklern, bezeichnet aber der Quasi-Standard für ein "Concurrent Versions System", ein (Code-)Versionsverwaltungssystem.

Grüße
Biber
Mitglied: bastla
bastla 15.08.2007 um 02:09:28 Uhr
Goto Top
Hallo marcos und willkommen im Forum!

Um Biber's Versprechung (So etwas wird hier im Forum meist in wenigen Stunden entwickelt ...) zumindest in den Grundzügen einzulösen:
Anmerkungen:
Aufgrund des gewünschten Trennzeichens nehme ich an, dass Text in der Zieldatei nicht unter Anführungszeichen zu stehen braucht.
Es werden solange Datenzeilen geschrieben, bis eine Zeile erreicht wird, in der die Zelle in der ersten Datenspalte (ABSPALTE) leer ist.
Zum Testen: Wenn Du auf dem Blattregister ("Tabelle1") per Rechtsklick "Code anzeigen" wählst, kannst Du denn Code in den (jetzt geöffneten) VBA-Editor kopieren und aus dem Tabellenblatt als "Makro" aufrufen.

Grüße
bastla
Mitglied: 52028
52028 15.08.2007 um 11:16:15 Uhr
Goto Top
Wow, ihr seit wirklich schnell! ;)

Ich bin die nächsten Tage nicht in der Stadt und kann das folglich nicht ausprobieren, werde mich aber zu WE hin auf jeden Fall melden und das ausprobieren!

Vielen Dank auf jeden Fall schonmal!
Mitglied: 52028
52028 18.08.2007 um 14:15:40 Uhr
Goto Top
So, da bin ich wieder!

Die Erstellung der Text-Datei funktioniert wunderbar. Das Makro funktioniert auch. Allerdings suche ich gerade noch nach der Möglichkeit es mittels batchjob direkt auszuführen. Habe schon versucht es mittels Auto_Open() automatisch starten zu lassen - klappt aber noch nicht. Aber probieren geht über studieren... ;)
Mitglied: 52028
52028 19.08.2007 um 16:30:41 Uhr
Goto Top
So, ich danke euch nochmal - alles läuft jetzt zu meiner Zufriedenheit.

Nur eine Frage habe ich noch. Ist es theoretisch möglich mit diesem Excel-Makro auch eine andere Datei auszulesen? Ich stell mir das so vor, dass mein Batchjob meine Excel-Datei inklusive Makro aufruft, Excel aber widerum das Makro auf eine ganz andere Datei anwendet, dessen Pfad ich im Makro angeben kann.

Geht sowas theoretisch? Oder sogar praktisch ganz einfach?

Viele Grüße!
Mitglied: bastla
bastla 19.08.2007 um 22:09:17 Uhr
Goto Top
Hallo marcos!

Wenn Du das Ganze über Batch starten willst, sollte die Steuerung von Excel per VBS erfolgen, also etwa in der Art:
Wenn Du das obige Script zB in "C:\Scripts\XLS2CSV.vbs" speicherst, kannst Du es in einer Batchdatei wie folgt aufrufen:
Das Script erwartet die Übergabe einer Exceldatei, für welche die Existenz und der Typ ".xls" geprüft wird. Bei dabei auftretenden Fehlern (oder bei abgefangenen Scriptfehlern), wird eine Fehlermeldung ausgegeben, ansonsten endet das Script mit der Ausgabe von "OK" (oder einem Abbruch wegen eines Scriptfehlers und Anzeige der VBS-Fehlermeldung). Diese Ausgaben werden dazu verwendet, nur bei erfolgreichem Ablauf der Konvertierung zur Marke ":Weiter" zu springen und anderenfalls nach einer "Pause" (zum Lesen der Fehlermeldung) den Batch zu beenden.

Die Ausgabedatei erhält den selben Namen mit Typ ".csv" und wird in den gleichen Ordner wie die Exceldatei geschrieben.

Als Alternative habe ich eine zweite "DATEI = ..."-Zeile für die Verwendung eines konstanten Zielpfades (aber weiterhin variablen Dateinamens) dargestellt. Eine ev bereits vorhandene Zieldatei wird in beiden Fällen ohne Rückfrage überschrieben.

Die wahrscheinlichsten Fehler, die während der Konvertierung auftreten könnten (zB "Tabelle1" nicht vorhanden), werden in der aktuellen Fassung des Scripts abgefangen, sodass der unschöne Nebeneffekt eines Script-Fehlers (nämlich, dass Excel im Hintergrund weiterhin laufen und die ".xls"-Datei geöffnet halten könnte und daher über den Taskmanager, Register "Prozesse", beendet werden müsste) - eigenlich nicht auftreten sollte. Die Konstanten am Beginn des Programms werden allerdings nicht geprüft, sodass eine falsche Zeilen- oder Spaltennummer den beschriebenen Effekt trotzdem herbeiführen könnte ...

Grüße
bastla

P.S.: Für die adäquate Beschreibung des Errorhandlings in VBS fehlen mir einmal mehr die (jugendfreien) Worte ...
Heiß diskutierte Beiträge
question
RAM-Zugriff auf einem neuen High-Performance Server, teilweise um Welten langsamer als auf einer WorkstationMysticFoxDEVor 1 TagFrageBenchmarks53 Kommentare

Moin Zusammen, mir ist gestern beim Optimieren eines neuen Servers eine Sonderheit aufgefallen, die ich mir so beim besten Willen, momentan absolut nicht erklären kann. ...

question
2U Home-Server Frage zur HardwaremossoxVor 1 TagFrageServer-Hardware13 Kommentare

Hallo zusammen, ich habe in den letzten Jahren auf die Systeme von Synology gesetzt. Im Wesentlichen ging es immer nur um simple CIFS Dienste, nichts ...

question
Firmengelände Glasfaser mehrere GebäudeTonLichtVideoVor 1 TagFrageNetzwerke5 Kommentare

Hallo zusammen, Ist Zustand: Firmengelände mit mehreren großen Hallen die zentral per Glasfaser verbunden werden sollen. Längen zwischen 100 und 400 Metern. Aufgrund der Zukunftssicherheit ...

question
Powershell Ordner löschen die älter als x Tage sind gelöst sascha46Vor 1 TagFrageEntwicklung7 Kommentare

Hallo Ich würde gerne in einem Verzeichnis alle Ordner die älter als X Tage sind löschen. Aber irgendwie bekomme ich das nicht hin. Bisher habe ...

report
Erfahrungsbericht Vodafone - Die endlose VertragsänderunganteNopeVor 12 StundenErfahrungsberichtFlatrates12 Kommentare

Hallo zusammen, natürlich ist es öffentlich bekannt, dass Vodafone nicht gerade der "beste" Anbieter ist. Für mich persönlich ist Vodafone an Inkompetenz nicht zu überbieten ...

question
Seltsame Dateisperrungen beim NASSarekHLVor 1 TagFrageWindows 106 Kommentare

Hallo zusammen, ich gebe mal eine Anfrage aus unserem Gemeindebüro weiter: für einige Vorgänge, wie zum Beispiel das Erstellen des monatlichen Mitteilungsblattes, arbeiten Frau X ...

question
Cisco 2702 Autonomous Mode gelöst interface31Vor 1 TagFrageLAN, WAN, Wireless5 Kommentare

Hi, habe gerade paar 2702 AP im Auto Mode an Netz gehängt. Mir kommt es vor das diese mit ihrer SSID aber nicht sichtbar sind. ...

question
Aruba iAP Airwave aktivinterface31Vor 1 TagFrageLAN, WAN, Wireless9 Kommentare

Hi, habe ein paar Aruba iAP an denen der Airwave Management noch aktiv ist. Sprich nach ein paar Minuten zieht dieser sich die Info vom ...