xstr3ck3rx
Goto Top

VBScript und BatchScript mit OpenFileDialog und SaveFileDialog

Hallo Leute!
Ich brauche eure Hilfe um mein vorhandendes VBScript und/oder BatchScript zu modifizieren!

Hallo Leute!
Ich habe aus meiner anderen Frage in diesem Forum ein VBScript bekommen und möchte das nun so modifizieren, dass wenn ich es starte sich ein OpenFileDialog öffnet und ich eine .xls oder eine .xlsx datei auswählen kann und sich anschließend ein SaveFileDialog öffnet, wo ich die Excel Datei als .txt Datei abspeichern kann.
Das konvertieren kann das script schon. Dazu kommt, dass das Script nach jeder Zeile noch ein ";" dran schreibt.
Also benötige ich nur die OpenFileDialog Funktion und die SaveFileDialog Funktion.

Hier mein VBScript:

Set fso = CreateObject("Scripting.FileSystemObject")  
Set Args = WScript.Arguments
XLSDatei = Args(0)
TXTDatei = 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 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)  

Ich hoffe ihr könnt mir helfen. ;)
Schon mal ein fettes Dankeschön im Vorraus!

MfG
xstr3ck3rx

Content-Key: 203576

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

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

Member: rubberman
rubberman Mar 19, 2013 at 18:37:15 (UTC)
Goto Top
Hallo xstr3ck3rx.

Da du Excel nun sowieso schon im Hintergrund öffnest, kannst du es auch gleich sichtbar öffnen und die entsprechenden Dialoge von Excel nutzen.

Grüße
rubberman
Member: xstr3ck3rx
xstr3ck3rx Mar 20, 2013 updated at 09:44:49 (UTC)
Goto Top
Hallo rubberman!
Erst mal danke für deine Antwort.
Ich soll dieses Tool für die Arbeit fertigstellen und ich habe das VBScript, was auch oben steht und habe dies per batch gestartet. In Batch wurde dann nach einer Excel Datei (xls oder xlsx) abgefragt, die sich auf einem bestimmten Pfad befinden muss (Bei mir habe ich den Desktop eingestellt). So jetzt möchte ich die ganze Geschichte aber so modifizieren, dass sich wenn ich das VBScript oder das Batch script startet, sich ein OpenFileDialog öffnet, wo ich dann eine .xls oder eine .xlsx Datei auswählen kann und anschließend ein SaveFileDialog startet, wo ich angeben kann, wo die ausgewählte Excel Datei(.xls oder .xlsx) als txt gespeichert werden soll. Das konvertieren ist, wie schon gesagt im VBScript enthalten, mir fehlt nur der OpenFileDialog und der SaveFileDialog. Ich poste hier mal mein etwas längeres Batch script, was ich wenn ich eine OpenFile- und eine SaveFileDialog Funktion habe, wahrscheinlich nicht mehr benötigen werde.

@echo off
title Excel to TXT Converter
color 1E
:start
color 1E
echo.
set /P "Datei1=Bitte geben Sie den Namen der Excel Datei ein: "  
if "%Datei1%" == "" goto fehler  
if "%Datei1%" == " " goto fehler  
if NOT exist C:\Users\%username%\Desktop\"%Datei1%".xls goto komisch  
if exist C:\Users\%username%\Desktop\"%Datei1%".xls goto komisch2  
:komisch
if NOT exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto falsch2  
if exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto weiter0  
:komisch2
if not exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto weiter0  
:weiter0
color 1E
echo.
set /P "Datei2=Bitte geben Sie den Namen des Ausgabedokuments ein: "  
if "%Datei2%" == "" goto fehlerz  
if exist C:\Users\%username%\Desktop\"%Datei2%".txt goto falsch1  
if NOT exist C:\Users\%username%\Desktop\"%Datei1%".xls goto komisch3  
if exist C:\Users\%username%\Desktop\"%Datei1%".xls goto komisch4  
echo.
:komisch3
if NOT exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto falsch2  
if exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto weiter3  
:komisch4
if not exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto weiter2  
if exist C:\Users\%username%\Desktop\"%Datei1%".xlsx goto zwischen3  
:haha3
if exist C:\Users\%username%\Desktop\"%Datei2%".txt goto falsch1  
if NOT exist C:\Users\%username%\Desktop\"%Datei2%".txt goto weiter2  
:weiter2
cscript //nologo "C:\Excel to TXT\Scripts\XL2CSV.vbs" "C:\Users\%username%\Desktop\%Datei1%.xls" "C:\Users\%username%\Desktop\%Datei2%.txt"  
goto test85
:weiter3
cscript //nologo "C:\Excel to TXT\Scripts\XL2CSV.vbs" "C:\Users\%username%\Desktop\%Datei1%.xlsx" "C:\Users\%username%\Desktop\%Datei2%.txt"  
goto test85
:test85
if NOT exist C:\Users\%username%\Desktop\"%Datei2%".txt goto test88  
if exist C:\Users\%username%\Desktop\"%Datei2%".txt goto Ende1  
:test88
color C4
echo msgbox "%Datei2%.txt konnte nicht erstellt werden!" > %tmp%\tmp.vbs  
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto start
:zwischen4
echo.
echo Waehle zwischen:
echo.
echo %Datei1%.xls mit der Zahl 1 
echo.
echo %Datei1%.xlsx mit der Zahl 2
echo.
SET /p wahl=
if '%wahl%' EQU '1' goto haha1  
if '%wahl%' EQU '2' goto haha2  
if '%wahl%' NEQ '1' goto piep  
if '%wahl%' NEQ '2' goto piep  
:haha1
if exist C:\Users\%username%\Desktop\"%Datei2%".txt goto falsch1  
if NOT exist C:\Users\%username%\Desktop\"%Datei2%".txt goto weiter2  
:haha2
if exist C:\Users\%username%\Desktop\"%Datei2%".txt goto falsch1  
if NOT exist C:\Users\%username%\Desktop\"%Datei2%".txt goto weiter3  
:zwischen3
echo msgbox "Waehle zwischen: %Datei1%.xls mit der Zahl 1 | %Datei1%.xlsx mit der Zahl 2" > %tmp%\tmp.vbs  
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto zwischen4
:piep
echo msgbox "Ungueltige Eingabe!" > %tmp%\tmp.vbs  
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto zwischen4
:falsch2
color C4
echo msgbox "%Datei1%.xls(x) 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
:fehler
color C4
echo msgbox "Ungueltige Eingabe!" > %tmp%\tmp.vbs  
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
goto start
:fehlerz
color C4
echo msgbox "Ungueltige Eingabe!" > %tmp%\tmp.vbs  
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
echo.
echo Bitte geben Sie den Namen der Excel Datei ein: %Datei1% 
goto weiter0
:falsch1
color C4
echo msgbox "%Datei2%.txt existiert bereits. Bitte waehlen Sie einen anderen Namen!" > %tmp%\tmp.vbs  
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
cls
echo.
echo Bitte geben Sie den Namen der Excel Datei ein: %Datei1%
goto weiter0
:neustart
@call %0
goto neustart2
:neustart2
exit
:schliessen


Das heißt ich möchte nur eine OpenFileDialog und eine SaveFileDialog Funktion ins Batchscript oder ins VBScript einbauen, sodass die eigentliche Funktion des VBScripts aber bleibt.

MfG
xstr3ck3rx

PS: Sry für das ständige Wiederholen, es ist noch sehr früh *gähn*
Member: rubberman
rubberman Mar 20, 2013 at 18:20:28 (UTC)
Goto Top
Hallo xstr3ck3rx,

sorry, habe mir deinen Batch jetzt nicht genauer angesehen. Der würde sich vom ersten Überfliegen sicher auf ein Viertel eindampfen lassen. Aber egal, das war nicht deine Frage. Wie schon gesagt, öffnest du sowieso Excel im Hintergrund und Excel hat die entsprechenden Dialoge. Wie du ja bereits weißt, lässt sich Excel recht gut per VBScript steuern, also auch die Dialoge.

Habe das Script von bastla mal entsprechend angepasst.
Set fso = CreateObject("Scripting.FileSystemObject")  

Set XL = WScript.CreateObject("Excel.Application")  
XL.Visible = True
XL.DisplayAlerts = False
XLSDatei = XL.GetOpenFilename("Excel-Dateien (*.xls; *.xlsx),*.xls;*.xlsx", _  
  1, "Excel-Datei zum konvertieren öffnen ...", , False)  
If XLSDatei <> False Then
  Set WB = XL.Workbooks.Open(XLSDatei)
  TXTDatei = XL.GetSaveAsFilename(fso.GetBaseName(XLSDatei) & ".txt", _  
    "Text-Dateien (*.txt), *.txt", 1, "Text-Datei speichern unter ...")  
  If TXTDatei <> False Then
    WB.SaveAs TXTDatei, 6, , , , , , , , , , True
    WB.Saved = True
  End If
End If
XL.Application.Quit
If TXTDatei <> False Then
  WScript.Sleep 1000
  T = fso.OpenTextfile(TXTDatei).ReadAll
  fso.CreateTextFile(TXTDatei).Write Replace(T, vbNewLine, ";" & vbNewLine)  
End If
Evtl. funktioniert das auch mit
XL.Visible = False
in der 4. Zeile, einfach testen.

Die Doku findest du hier bzw. hier.

Grüße
rubberman
Member: xstr3ck3rx
xstr3ck3rx Mar 21, 2013 at 07:43:05 (UTC)
Goto Top
Hallo rubberman!
VIELEN LIEBEN DANK!
Ich werde es gleich mal testen! ;)

MfG
xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 21, 2013 updated at 11:31:32 (UTC)
Goto Top
Hallo rubberman!
Eine Frage allerdings habe ich noch.
Kann man die VBS Datei in eine EXE umwandeln? Weil die ganzen converter im Internet funktionieren aber machen eine msgbox bevor das script startet, wo drin steht, dass es nur die Demo Version sei.
Wüsstest du da eine kostenlose Lösung?

MfG
xstr3ck3rx
Member: rubberman
rubberman Mar 21, 2013 updated at 20:05:29 (UTC)
Goto Top
Hallo xstr3ck3rx.

VBScript ist, wie der Name schon sagt, eine Scriptsprache die interpretiert und nicht kompiliert wird. Von irgendwelchen Krücken von Konvertern die versuchen daraus eine *.exe Datei zu machen, halte ich überhaupt nichts.
Willst du ein Executable, lerne eine kompilierbare Programmiersprache.

Grüße
rubberman
Member: xstr3ck3rx
xstr3ck3rx Mar 22, 2013 at 08:34:42 (UTC)
Goto Top
Hallo rubberman!
okay und Vielen Dank für deine Antwort.

MfG
xstr3ck3rx
Member: xstr3ck3rx
xstr3ck3rx Mar 22, 2013 updated at 13:29:47 (UTC)
Goto Top
Hallo Leute!
Ich hätte da noch eine letzte Frage:
Unzwar möchte ich in mein VBScript noch eine weitere Funktion einbauen:
Das VBScript soll immer in der umgewandelten txt datei in der 3. Spalte im Textdokument so viele "0" VOR die Zahl machen, sodass die Zahl immer 10 stellig ist.

Also hier ein Beispiel wie es vorher im Textdokument aus sieht:

Beispiel;Hallo;350;Beispiel2;Tschüss;
Beispiel;Hallo;42;Beispiel2;Tschüss;
Beispiel;Hallo;3505;Beispiel2;Tschüss;

Und hier wie es nachher in der txt aussehen soll:

Beispiel;Hallo;0000000350;Beispiel2;Tschüss;
Beispiel;Hallo;0000000042;Beispiel2;Tschüss;
Beispiel;Hallo;0000003505;Beispiel2;Tschüss;

Also wie du siehst immer eine 10stellige Zahl in der 3. Spalte aber wirklich nur 10 stellig und wirklich nur in der 3. Spalte.

Schon mal danke im Vorraus!!! ;)

Mf
xstr3ck3rx

PS: Vielleicht kann man das im script dann so vormulieren, dass nach jedem 2. ";" so viele nullen müssen, dass die gesamte Zahl 10 stellig ist.
Member: rubberman
rubberman Mar 22, 2013 at 21:52:57 (UTC)
Goto Top
Hallo xstr3ck3rx,

dazu muss die Textdatei zeilenweise eingelesen werden und an den Semikola aufgesplittet und neu zusammengesetzt werden.

Set fso = CreateObject("Scripting.FileSystemObject")  

Set XL = WScript.CreateObject("Excel.Application")  
XL.Visible = True
XL.DisplayAlerts = False
XLSDatei = XL.GetOpenFilename("Excel-Dateien (*.xls; *.xlsx),*.xls;*.xlsx", _  
  1, "Excel-Datei zum konvertieren öffnen ...", , False)  
If XLSDatei <> False Then
  Set WB = XL.Workbooks.Open(XLSDatei)
  TXTDatei = XL.GetSaveAsFilename(fso.GetBaseName(XLSDatei) & ".txt", _  
    "Text-Dateien (*.txt), *.txt", 1, "Text-Datei speichern unter ...")  
  If TXTDatei <> False Then
    WB.SaveAs TXTDatei, 6, , , , , , , , , , True
    WB.Saved = True
  End If
End If
XL.Application.Quit
If TXTDatei <> False Then
  WScript.Sleep 1000
  T = ""  
  Set F = fso.OpenTextfile(TXTDatei)
  Do While Not F.AtEndOfStream
    A = Split(F.ReadLine, ";")  
    On Error Resume Next
    If IsNumeric(A(2)) Then A(2) = Right("0000000000" & A(2), 10)  
    On Error Goto 0
    T = T & Join(A, ";") & ";" & vbNewLine  
  Loop
  F.Close
  fso.CreateTextFile(TXTDatei).Write T
End If

Grüße
rubberman
Member: xstr3ck3rx
xstr3ck3rx Mar 31, 2013 at 11:39:29 (UTC)
Goto Top
Hallo rubberman!
Vielen Dank für dieses wunderbare Script.
Sry das es so lange gedauert hat, dass ich antworten konnte.
VIELEN DANK!

MfG
xstr3ck3rx