xstr3ck3rx
Goto Top

Xls to csv Converter per Batch (ohne Excel)

Hallo Leute,
ich hoffe, dass Ihr mir bei meine Problem behilflich sein könnt.

Ich schreibe zurzeit ein Batch-Script, das eigentlich eine .xls datei in eine .txt datei umwandeln soll. Zurzeit kann es nur .csv in .txt dateien umwandeln, aber ich möchte gerne von .xls in .txt. Gerne auch über den Zwischenschritt .csv.
Wie schon oben beschrieben nutze ich bis jetzt das batch script zum converten von .csv nach .txt mit den folgendem Quelltext:

@echo off
title Semikolon Converter
color 0A
:start
echo.
ECHO M™chten Sie eine .csv Datei Exportieren[e] oder eine .txt Datei Importieren[i]?
echo.
SET /p wahl=
if '%wahl%' EQU 'e' goto Export
if '%wahl%' EQU 'i' goto Import
if '%wahl%' NEQ 'e' goto falsch
if '%wahl%' NEQ 'i' goto falsch
:Export
echo.
color 1E
Set /P Datei=Bitte geben Sie den Namen der .csv Datei ein: %
echo.
Set /P Datei2=Bitte geben Sie den Namen des Ausgabedokuments ein: %
echo.
if NOT exist %Datei%.csv goto falsch2
if exist %Datei%.csv goto weiter
:weiter
FOR /F "delims=" %%A in (%Datei%.csv) do echo %%A;>>%Datei2%.txt
goto Ende1
:Import
echo.
color 1E
Set /P Datei=Bitte geben Sie den Namen des Textdokuments ein: %
echo.
Set /P Datei2=Bitte geben Sie den Namen der Ausgang .csv Datei ein: %
echo.
if NOT exist %Datei%.txt goto falsch3
if exist %Datei%.txt goto weiter2
:weiter2
FOR /F "delims=" %%A in (%Datei%.txt) do echo %%A>>%Datei2%.csv
goto Ende2
:falsch
color C4
echo msgbox "Falsche Eingabe! Exportieren mit der Taste [e] oder Importieren mit der Taste [i]." > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto neustart
:falsch2
color C4
echo msgbox "%Datei%.csv konnte nicht gefunden werden!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto neustart
:falsch3
color C4
echo msgbox "%Datei%.txt konnte nicht gefunden werden!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto neustart
:Ende1
echo msgbox "%Datei2%.txt wurde erstellt!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
goto schliessen
:Ende2
echo msgbox "%Datei2%.csv wurde erstellt!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
goto schliessen
:neustart
@call %0
goto neustart2
:neustart2
exit
:schliessen


Es kann sein das einiges überflüssig ist, aber es funktioniert so.
So jetzt hätte ich gerne aber, dass es von .xls nach .txt konvertiert. Kann mir da jemand helfen?
Und nein ich möchte nicht in Excel unter speichern unter.. .csv, weil ich das so ein ganzen Tool für die Arbeit brauche. :D
Und ich möchte in Excel auch kein Modul hinzufügen bzw in Excel ein VBS nutzen.
PS: Nicht wundern, dass das Script nach jeder Zeile ein ";" hinzufügt das möchte ich so bzw. mein Chef :D
Danke Schon mal im vorraus :D
MfG
Leon

Content-Key: 203046

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: bastla
bastla Mar 08, 2013 at 19:58:17 (UTC)
Goto Top
Hallo xstr3ck3rx und willkommen im Forum!

Jetzt wissen wir schon mal, was Du nicht möchtest - die Variante "Script (zB VBS), um Excel von außerhalb zu steuern" ist aber nicht ausgeschlossen?

Grüße
bastla
Member: xstr3ck3rx
xstr3ck3rx Mar 08, 2013 at 20:16:15 (UTC)
Goto Top
hallo bastla,
erstmal danke für deine schnelle antwort.
Ich wollte es gerne mit einem Batch-Script schreiben, aber ich weiß nicht ob dies möglich ist. Ist es möglich? Oder ist es möglich ein VBS in batch ein zubinden?
MfG
Leon
Member: bastla
bastla Mar 08, 2013 at 20:20:12 (UTC)
Goto Top
Hallo xstr3ck3rx!

Ersteres nein, letzteres ja.

Grüße
bastla
Member: xstr3ck3rx
xstr3ck3rx Mar 08, 2013 at 20:26:55 (UTC)
Goto Top
hallo bastla!
mal wieder ein fettes DANKESCHÖN für die schnelle Antwort.
Okay da ich jetzt weiß, dass man ein VBS in eine Batch Datei einbinden kann, möchte ich gerne wissen wie. Also ich würde gerne meine Batch Datei hauptsächlich so lassen, bloß da vbs script hinzufügen, sodass ich auch eine xls in eine csv umwandeln kann von csv nach txt lass ich dann mein script übernehmen.
MfG,
xstr3ck3rx
Member: bastla
bastla Mar 08, 2013 at 21:07:26 (UTC)
Goto Top
Hallo xstr3ck3rx!
von csv nach txt lass ich dann mein script übernehmen.
Lässt sich alles in einem Arbeitsgang erledigen (insbes, wenn es nur darum zu gehen scheint, am Zeilenende ein Semikolon anzufügen) ...

Wie ist denn der Aufbau der Quelldaten - gibt es eine bestimmte Spaltenanzahl, sollen alle Zeilen in die Zieldatei (oder zB x Überschriftenzeilen übersprungen werden), in welcher Tabelle der Exceldatei befinden sich die Daten?

Grüße
bastla
Member: xstr3ck3rx
xstr3ck3rx Mar 08, 2013 at 21:23:10 (UTC)
Goto Top
Hallo bastla!
Also die Datei soll nach einem Datei Namen fragen also nach einer .xls.
Diese soll das Programm dann in eine .txt umwandeln.
Nachdem die Datei nach der .xls Datei gefragt hat, soll sie auch noch fragen, wie der Name des Ausgangtextdokuments (.txt) sein soll.
D.h. jede .xls datei die ich angebe, soll umgewandelt werden.
Zusätzlich soll dann an jedem Zeilenende in der .txt ein Semikolon stehen.
Member: xstr3ck3rx
xstr3ck3rx Mar 08, 2013 at 23:32:21 (UTC)
Goto Top
@ bastla
Ich werde jetzt erstmal schlaffen gehen. Ich hoffe, dass wir uns morgen ein script zusammen basteln könnten, denn ich weiß nicht, wie ich eine xls datei in ein txt so umwandeln kann das zusätzlich auch noch ein Simekolon an jedem Zeilenende steht.
Gute Nacht.
MfG
xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 13:19:00 (UTC)
Goto Top
Guten Tag.
Weiß jemand, was ich am script verändern muss, damit es direkt von einer xls in eine txt mit dateinamen abfrage umwandelt?
Mitglied: 76109
76109 Mar 09, 2013 at 13:42:28 (UTC)
Goto Top
Hallo xstr3ck3rx!

damit es direkt von einer xls in eine txt
Ohne Excel geht das leider nicht...face-wink

Gruß Dieter
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 13:46:12 (UTC)
Goto Top
hallo Dieter,
ich bin mir sicher, dass es ohne Excel auch geht, denn ich habe schon so einiges im Internet dazu gefunden. Mit VBS geht es z.B. ohne Excel. Bloß ich möchte halt mein Batch Script behalten und ein VBS ins batch script einbinden, sodass das VBS von xls nach txt konvertiert und mein Batch script nach jeder Zeile ein Semikolon dran hängt.
MfG
xstr3ck3rx
Mitglied: 76109
76109 Mar 09, 2013 at 13:50:30 (UTC)
Goto Top
Hallo xstr3ck3rx!

Mit VBS geht es z.B. ohne Excel.
face-wink

Gruß Dieter
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 13:56:43 (UTC)
Goto Top
Hallo Dieter,
Leider habe ich das VBS schon gelöscht und weiß nicht woher ich das hatte.
Sonst hätte ich es dir beweisen können :P
MfG
xstr3ck3rx
Mitglied: 76109
76109 Mar 09, 2013 at 14:04:02 (UTC)
Goto Top
Hallo xstr3ck3rx!

Du könntest mir beweisen, dass man Excel per VBS steuern kann, also indirekt mit Hilfe von Excel konvertieren...

Gruß Dieter
Member: Biber
Biber Mar 09, 2013 updated at 14:06:37 (UTC)
Goto Top
Moin xstr3ck3rx,

du bist noch gar nicht wieder dran mit neuen Nachfragen... face-wink

Bitte beantworte erstmal bastlas Rückfragen.

Beim Umformatieren einer .csv-Datei in ein neues Zeilenformat reicht ja vielleicht die Frage nach einem neuen Dateinamen.

Beim Auslesen einer Excel-Datei brauchen wir schon ein paar mehr Infos:
  • welches von wie vielen Arbeitsblättern soll rausgeflöht werden?
  • Überschriften oder nicht?
  • Format von Datums- und numerischen Feldern?
  • Behandlung von Umlauten?

Und, was ich als erstes nachfragen würde:
WTF ist denn das Ziel der Aktion, die Frage hinter der Frage?
Das hört sich für mich alles nicht nach einem professionell durchgestylten Geschäftsprozess an.

Grüße
Biber
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 14:30:56 (UTC)
Goto Top
hi Biber,
es geht darum das ich eine Excel Tabelle habe die wie folgt aufgebaut ist:
Zum;Beispiel;So;
mit;Semikolon;am;Ende;

Also das es eine xls Tabelle mit trennzeichen ";" ausgibt. Das Beispiel kommt raus, wenn man eine xls tabelle als csv speichert und dann mit editor öffnet. bei dem beispiel habe ich nur mit meinem Batch Script ein ";" an jedes Zeilenende gehangen.
Ich schaffe es aber nur mit meinem Batchscript, eine csv in eine txt umzuwandel aber mein ziel ist es eine xls in eine txt umzuwandeln, ohne in excel speichern unter zudrücken.
D.h. das Programm soll mich nach dem Namen der .xls fragen und nach dem namen des Ausgangstextdokuments (.txt).
und dann soll es so wie im Beispiel umgewandelt werden.
MfG
xstr3ck3rx
Member: bastla
bastla Mar 09, 2013 updated at 15:10:25 (UTC)
Goto Top
Hallo xstr3ck3rx!

Du antwortest an Bibers und meinen Fragen vorbei - anyhow: Das folgende VBScript erwartet als Aufrufparameter den Pfad zu einer Excel-Datei und den Pfad zur gewünschten CSV-Datei (wobei der Zielordner vorweg bereits existieren muss) und erstellt die CSV-Datei unter Verwendung von Excel (da es ohne installiertes Excel, wie Dieter schon betont hat, nicht geht):
Set fso = CreateObject("Scripting.FileSystemObject")  
Set Args = WScript.Arguments
XLSDatei = Args(0)
CSVDatei = Args(1)

If Not fso.FileExists(XLSDatei) Then WScript.Quit(1)

Set XL = WScript.CreateObject("Excel.Application")  
XL.Visible = False
XL.DisplayAlerts = False
Set WB = XL.Workbooks.Open(XLSDatei)
WB.SaveAs CSVDatei, 6, , , , , , , , , , True
WB.Saved = True
XL.Application.Quit
WScript.Sleep 1000
T = fso.OpenTextfile(CSVDatei).ReadAll
fso.CreateTextFile(CSVDatei).Write Replace(T, vbNewLine, ";" & vbNewLine)  
Der Aufruf aus einem Batch erfolgt (unter der Annahme, dass das Script als "C:\Scripts\XL2CSV.vbs" gespeichert ist) etwa so:
set "Datei1=D:\Dein Ordner\Deine.xls"  
set "Datei2=D:\Dein Zielordner\Deine.csv"  
::
::
cscript //nologo "C:\Scripts\XL2CSV.vbs" "%Datei1%" "%Datei2%" || echo "%Datei1%" nicht gefunden! & goto :eof 
Falls die Excel-Datei nicht gefunden wird, gibt das Script den Errorlevel 1 zurück (Verwendung wie oben gezeigt).

Excel benötigt für beide Dateien vollständige Pfade - falls also in "%Datei1%" aufgrund der Eingabe durch den Benutzer nur der Dateiname stehen sollte, kannst du mit
set "Datei1=%cd%\%Datei1%"
vor dem Scriptaufruf den Pfad hinzufügen.

Grüße
bastla
Mitglied: 76109
76109 Mar 09, 2013 updated at 15:27:12 (UTC)
Goto Top
Hallo bastla!

Wobei ich mich frage, wozu das Batch-Script jetzt noch gut sein soll?

Eventuell wäre zu überlegen, ob man das Script nicht einfach in den 'Senden an'-Ordner legt und die Exceldateien per 'Senden an' an das Script übergibt. Ggf könnte auch noch der Dateiname der Ausgabe-Datei (*.txt) anhand der Eingabe-Datei extrahiert werden...

Gruß Dieter
Member: bastla
bastla Mar 09, 2013 at 15:24:45 (UTC)
Goto Top
Hallo Dieter!

Klar - hatten wir ja auch alles schon.

Aus welchem Grund xstr3ck3rx Batch haben wollte, kannst Du eigentlich nur ihn fragen (und vielleicht bekommst du ja sogar eine Antwort face-wink) ...

Grüße
bastla
Mitglied: 76109
76109 Mar 09, 2013 at 15:31:16 (UTC)
Goto Top
Hallo bastla!

Aus welchem Grund xstr3ck3rx Batch haben wollte, kannst Du eigentlich nur ihn fragen (und vielleicht bekommst du ja sogar eine Antwort ) ...
Stimmt! Auf die Antwort bin ich schon gespanntface-wink

Gruß Dieter
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 15:54:58 (UTC)
Goto Top
Erst mal ein fettes DANKESCHÖN an euch ich werds gleich mal ausprobieren.
Ich brauche das für die Arbeit bzw für meine chef. Er arbeitet viel mit Excel und sucht deshalb ein Tool, dass seine vielen excel tabellen in txt umwandelt damit es im ausland in ihre Programme importiert werden kann. Und ich benutze zusätzlich noch batch, weil ich damit noch sachen hinzufügen möchte.
VIELEN DANK.
MfG xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 16:18:31 (UTC)
Goto Top
Ich bin zu blöd.
bastla könntest du mir helfen das richtig zu speichern. Ich habe das obere Script jetzt als XL2CSV.vbs unter dem Pfad "C:\Scripts\" gespeichert und was mache ich dann damit er es vernümpftig umwandelt?
MfG
xstr3ck3rx
Member: bastla
bastla Mar 09, 2013 at 16:32:04 (UTC)
Goto Top
Hallo xstr3ck3rx!

Da oben steht doch das konkrete Batch-Anwendungsbeispiel. face-confused

Grüße
bastla
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 17:03:44 (UTC)
Goto Top
Sry aber das verstehe ich jetzt gerade nicht also ich habe das script im vorgebenen pfad gespeichert und nun?
sry
MfG xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 17:08:18 (UTC)
Goto Top
Ok sry wie behindert bin ich denn xD
Ich habe es hinbekommen.
Sauber danke..
DANKESCHÖN :D
MfG
xstr3ck3rx
:*
Member: bastla
bastla Mar 09, 2013 at 17:08:23 (UTC)
Goto Top
Hallo xstr3ck3rx!

Für Dich kopiere ich das doch gerne hier herunter ...
set "Datei1=D:\Dein Ordner\Deine.xls"  
set "Datei2=D:\Dein Zielordner\Deine.csv"  
::
::
cscript //nologo "C:\Scripts\XL2CSV.vbs" "%Datei1%" "%Datei2%" || echo "%Datei1%" nicht gefunden! & goto :eof 
oder, wenn in "%Datei1%" und "%Datei2%" nur Dateinamen ohne Pfad stehen und als Pfad der aktuelle Ordner verwendet werden soll:
set "Datei1=D:\Dein Ordner\Deine.xls"  
set "Datei2=D:\Dein Zielordner\Deine.csv"  
::
::
cscript //nologo "C:\Scripts\XL2CSV.vbs" "%cd%\%Datei1%" "%cd%\%Datei2%" || echo "%Datei1%" nicht gefunden! & goto :eof  
Grüße
bastla
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 17:10:45 (UTC)
Goto Top
und noch mal danke!!!!!!
MFG
xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 21:25:50 (UTC)
Goto Top
Man kann das VBScript bestimmt auch so umändern das es von .xlsx in .txt umwandelt, oder nicht?
also wenn man im script überall, wo .xls steht noch ein "x" dazu schreibt. Ich habe es mal gemacht dann sieht es so aus:
Set fso = CreateObject("Scripting.FileSystemObject")
Set Args = WScript.Arguments
XLSXDatei = Args(0)
TXTDatei = Args(1)

If Not fso.FileExists(XLSXDatei) Then WScript.Quit(1)

Set XL = WScript.CreateObject("Excel.Application")
XL.Visible = False
XL.DisplayAlerts = False
Set WB = XL.Workbooks.Open(XLSXDatei)
WB.SaveAs TXTDatei, 6, , , , , , , , , , True
WB.Saved = True
XL.Application.Quit
WScript.Sleep 1000
T = fso.OpenTextfile(TXTDatei).ReadAll
fso.CreateTextFile(TXTDatei).Write Replace(T, vbNewLine, ";" & vbNewLine)


würde das so funktionieren oder fehlt da noch etwas, weil bei mir funktioniert es nur von .xls nach .txt nicht von .xlsx nach .txt.
Nicht wundern das ich aus .csv .txt gemacht habe, wollte es doch so und es funktioniert prima, bloß jetzt wollte ich fragen, wie ich es ändern muss, damit es von .xlsx nach .txt umwandeln kann.

MfG
xstr3ck3rx
Member: bastla
bastla Mar 09, 2013 at 21:36:46 (UTC)
Goto Top
Hallo xstr3ck3rx!

Du brauchst am Script garnix zu ändern ("XLSDatei" ist, wie "CSVDatei", nur ein Variablenname und hat keinen Einfluss auf das Format).

Ich habe übrigens mit einer xlsx-Datei erfolgreich getestet ...

Grüße
bastla

P.S.: Magst Du Deine Codeschnipsel nicht auch passend formatieren (geht auch im Nachhinein und auch für den Eröffnungsbeitrag)?
Member: xstr3ck3rx
xstr3ck3rx Mar 09, 2013 at 21:44:37 (UTC)
Goto Top
Hallo bastla!
Dann war ich wie immer zu doof und werde es weiter versuchen.
DANKE
Mfg
xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 18, 2013 updated at 12:11:13 (UTC)
Goto Top
Hallo bastla,
mal wieder habe ich eine weitere frage unzwar möchte ich das script jetzt so modifizieren, dass wenn ich das VBS per batch starte, sich ein FileOpenDialog öffnet und ich die %Datei1%.xls oder %Datei1%.xlsx auswählen kann und Sie anschließen über ein SaveAsDialog abspeichern kann. Wahrscheinlich brauche ich dann mein fettes batch script nicht mehr.
MfG
xstr3ck3rx