Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Converter von csv zu xls - Basierend auf CLI, automatisierbar

Frage Microsoft Microsoft Office

Mitglied: VW

VW (Level 2) - Jetzt verbinden

30.08.2007, aktualisiert 18.10.2012, 15689 Aufrufe, 36 Kommentare

Moin,

ich suche ein Tool, das nach Möglichkeit komplett auf der Commandozeile basiert, unter Windows läuft und zwischendurch keine Benutzereingaben erfordert. Es sollte also komplett automatisierbar sein und im Optimalfall sogar noch eine Ordnerüberwachung bieten, um nicht in Zeitabständen nach Dateien in einem bestimmten Ordner suchen zu müssen. Ansonsten nach Möglichkeit eine Funktion um (manuell angestoßen) alle CSV-Dateien in einem Ordner in xls (in einem anderen Ordner) umzuwandeln.

Was es können muss:
Konvertierung von CSV (Semikolon-getrennt, nächster Datensatz nach ENTER) in xls

Wer kennt ein entsprechendes Tool?
Wer hat Erfahrungen?
Weitere Fragen?

Mit freundlichen Grüßen,
VW
36 Antworten
Mitglied: bastla
LÖSUNG 01.09.2007, aktualisiert 24.12.2015
Hallo "Kürzester-bekannter-Nick"-Inhaber !

Ein Tool kenne ich nicht, aber als Bastellösung für das reine Umwandeln CSV in XLS könntest Du es mit dem folgenden VBScript (ein installiertes Excel vorausgesetzt) versuchen:
01.
'CSV2XLS.vbs 
02.
sOutPathDefault = "D:\InXLSKonvertierteCSV" 'Angabe des Default-Zielpfades ohne abschließenden "\" 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
If WScript.Arguments.Count = 0 Then 
06.
	WScript.Echo "Keine Quelldatei angegeben!" 
07.
	WScript.Quit(1) 
08.
End If 
09.
 
10.
sInFile = WScript.Arguments(0) 
11.
If Not fso.FileExists(sInFile) Then 
12.
	WScript.Echo sInFile & " nicht gefunden!" 
13.
	WScript.Quit(1)	 
14.
Else 'Pfad der Quelldatei zerlegen 
15.
	Set oInFile = fso.GetFile(sInFile) 'für vollständige Dateiangaben aus Dateisystem 
16.
	sInPath = oInFile.Path 'voller Quelldateipfad - wird zum Einlesen verwendet 
17.
	sInFileName = Left(oInFile.Name, InstrRev(oInFile.Name, ".") - 1) 'Dateiname ohne Pfad und Typ 
18.
	sInFileType = Mid(oInFile.Name, InstrRev(oInFile.Name, ".")) 'für Überprüfung auf CSV 
19.
	Set oInFile = Nothing 
20.
End If 
21.
 
22.
If WScript.Arguments.Count > 1 Then 
23.
	sOutFilePath = WScript.Arguments(1) 'angegebenen Zielpfad verwenden 
24.
Else 
25.
	sOutFilePath = sOutPathDefault 'kein Zielpfad angegeben - Default verwenden 
26.
End If 
27.
 
28.
If Not fso.FolderExists(sOutFilePath) Then 'Zielpfad nicht vorhanden, daher ... 
29.
	On Error Resume Next 
30.
	fso.CreateFolder(sOutFilePath) '... zu erstellen versuchen 
31.
	If Err.Number > 0 Then 
32.
		WScript.Echo "Ungueltiger Zielpfad: " & sOutFilePath 
33.
		WScript.Quit(1) 
34.
	Else 
35.
		On Error Goto 0 'Standardfehlerbehandlung wieder einschalten 
36.
	End If 
37.
End If 
38.
 
39.
If LCase(sInFileType) = ".csv" Then 'bei Typ ".csv" für Import in Temp-File kopieren 
40.
	sInPathTemp = sOutFilePath & "\" & sInFileName & ".tmp" 'Temp-File im Zielverzeichnis anlegen (Annahme: dort Schreibrechte) 
41.
	fso.CopyFile sInPath, sInPathTemp 
42.
	sInPath = sInPathTemp 'Daten aus Temp-File lesen 
43.
End If 
44.
 
45.
sOutPath = sOutFilePath & "\" & sInFileName & ".xls" 'Zieldateipfad erstellen 
46.
Do While InStr(sOutPath, "\\") 'vermeiden doppelter (mehfacher) "\" im Zieldateipfad (stört Excel offensichtlich nur beim Speichern) 
47.
	sOutPath = Replace(sOutPath, "\\", "\") 
48.
Loop 
49.
 
50.
Set oXL = CreateObject("Excel.Application") 
51.
With oXL 
52.
	.Workbooks.OpenText sInPath, , , , , , , True 'Delimiter Semicolon = True 
53.
	On Error Resume Next 
54.
	.ActiveWorkbook.ActiveSheet.Cells.EntireColumn.AutoFit 'Optimale Spaltenbreite für alle Spalten setzen 
55.
	.DisplayAlerts = False 'Keine Rückfrage beim Überschreiben schon vorhandener Zieldatei 
56.
	.ActiveWorkbook.SaveAs sOutPath, -4143 'Speichern als .xls 
57.
	If Err.Number > 0 Then 
58.
		CleanUp 
59.
		WScript.Echo sOutPath & " konnte nicht gespeichert werden!" 
60.
		WScript.Quit(1) 
61.
	End If 
62.
End With 
63.
CleanUp 
64.
 
65.
Sub CleanUp 
66.
oXL.Quit 
67.
Set oXL = Nothing 
68.
If LCase(sInFileType) = ".csv" Then 
69.
	On Error Resume Next 
70.
	fso.DeleteFile sInPathTemp 'temporäre Import-Datei zu löschen versuchen 
71.
End If 
72.
End Sub
Abgesehen von etwas Errorhandling (ganz wasserdicht bekommt man/frau sowas ja ohnehin kaum) macht das Script eigentlich nix anderes, als Du von Hand in Excel machen würdest:
- CSV-Datei importieren (nicht "öffnen" - dazu unten mehr),
- ein ganz klein wenig formatieren (Spaltenbreiten anpassen) und
- als XLS-Datei speichern (da "ohne Benutzereingabe" gewünscht war, wird eine ev bestehende Zieldatei kommentarlos überschrieben).

Zur Verwendung: Das Script erwartet beim Aufruf die Übergabe zumindest einer Importdatei (auch per Drag&Drop oder "SendTo" möglich) mit passendem Inhalt, aber nicht zwingend einem Dateityp ".csv". Zusätzlich kann auch der Zielordner angegeben werden. Wird darauf verzichtet, wird der in Zeile 2 festgelegt Default-Zielpfad verwendet. Sollte der Zielpfad noch nicht existieren, wird versucht, diesen zu erstellen.

Das Script endet mit einem Errorlevel 1, wenn:
- keine Importdatei übergeben wird,
- die Importdatei nicht gefunden wird,
- der Zielordner nicht existiert und auch nicht erstellt werden kann,
- beim Schreiben der XLS-Datei ein Fehler auftritt.

In anderen Fällen (auch, um bei den Tests Fehler besser eingrenzen zu können) könnte das Script mit einer Fehlermeldung abbrechen.
Ein paar Anmerkungen (für technisch Interessierte):
- Wenn ich in Excel eine CSV-Datei öffne, habe ich (je nach Herkunft) eine gute Chance, dass das Semikolon nicht als Trennzeichen interpretiert wird, sondern jeweils die gesamte Zeile in Spalte A steht. Bei manueller Bearbeitung schicke ich dann eben ein "Daten / Text in Spalten..." hinterher. Da mir per Script diese Möglichkeit nicht offen steht (und ich habe es versucht), muss ich Excel austricksen, indem ich den Dateityp ändere - ob auf ".txt" oder auf ".tmp" spielt dabei keine Rolle. Aus Sicherheitesgründen erstelle ich eine temporäre Kopie der CSV im Zielordner (dort sollte es ja tunlichst Schreibrechte geben, und den Pfad dafür muss ich sowieso kennen) und importiere dann eben diese Datei.

- Es ist zwar auch in Excel problemlos möglich (so wie in CMD oder in VBS), mehrere aufeinanderfolgende "\" innerhalb eines Dateipfades zu verwenden - solange es um das Einlesen der Datei geht. Beim Speichern sind einzelne "\" gefragt.

- Da ich mir sehr vorgenommen habe, das Error-Handling von VBS nicht mehr zu kommentieren, nur soviel: An einigen neuralgischen Stellen versuche ich, so gut es geht, Fehler abzufangen (insbesondere, wenn die Excel-Datei - aus welchen Gründen auch immer - nicht gespeichert werden kann, gibt es bei einem Abbruch des Scripts die unschöne Konsequenz, dass der Excel-Prozess nicht beendet wird und dann auch noch die CSV-Datei blockiert - daher musste ich besonderes Augenmerk auf ein ordentliches Beenden des Scripts legen).
Was die weitere Vorgangsweise anlangt: Da das Script jeweils nur eine Datei konvertiert, würde ich zur Steuerung eine Batchdatei mit etwa folgendem Inhalt einsetzen (ungetestet):
01.
@echo off & setlocal 
02.
set "Quelle=D:\ZuKonvertierendeCSV" 
03.
set "Ablage=D:\KonvertierteCSV" 
04.
set "Ziel=D:\AusCSVKonvertierteXLS" 
05.
set "Log=D:\Konvertierungsfehler.txt" 
06.
if not exist "%Ablage%" md "%Ablage%" 
07.
for %%i in (%Quelle%\*.csv) do call :ProcessFile "%%i" 
08.
goto :eof 
09.
:ProcessFile 
10.
cscript //nologo C:\Scripts\CSV2XLS.vbs %1 "%Ziel%">>"%Log%" || goto :eof 
11.
move %1 "%Ablage%" 
12.
goto :eof
Diese Batchdatei könnte per Taskplaner in regelmäßigen Abständen ausgeführt werden (ein Beispiel mit "Biber"-Gütesiegel, allerdings für unregelmäßige Abstände, gibt's hier ...)

Grüße
bastla
Bitte warten ..
Mitglied: VW
01.09.2007 um 15:33 Uhr
Moin bastla,

Danke dir erstmal für das Script.

habe eben einen Schnelltest mit einer aus Excel2003 erstellten CSV-Datei gemacht. Sah gut aus. (Hab eigentlich auch nichts anderes erwartet )

Leider kann ich das ganze erst am 10.09. mit den Dateien testen, auf die es ankommt, da ich in der kommenden Woche Schule habe und erst danach wieder auf der Arbeit sein werde.

Ich melde mich dann wieder.

Gruß,
VW
Bitte warten ..
Mitglied: VW
11.09.2007 um 14:49 Uhr
Moin,

nachdem ich heute leider erst dazu gekommen bin, das Script zu testen, muss ich sagen, es funktioniert SEEEHR gut.

Danke an Bastla nochmal.

Mit freundlichen Grüßen,
VW
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 15:27 Uhr
Muss ich deinen Ansatz in ein xls file al Makro einfügen??

Steh voll auf dem schlauch

Optimal wäre ein *.bat Datei. wenn ich diese in meinem csv ordner habe und dort ausführe. Das dann alles csv in xls umgewandelt werden


Weisst du was ich meine???

Gruß

Julia
Bitte warten ..
Mitglied: bastla
11.09.2007 um 15:38 Uhr
Hallo Bacaaardi!

Muss ich deinen Ansatz in ein xls file al Makro einfügen??
Nein - es ist ein VB-Script. Wenn Du es als "C:\Scripts\CSV2XLS.vbs" speicherst, sollte auch das Batch-Beispiel von oben funktionieren.

Optimal wäre ein *.bat Datei. wenn ich diese in meinem csv ordner habe und dort ausführe. Das dann alles csv in xls umgewandelt werden
Wenn Du das angeführte Beispiel etwas variierst, kannst Du sogar einen Ordner per Drag & Drop konvertieren lassen (wobei die .xls-Dateien und das Log in diesem Ordner abgelegt würden), etwa:
01.
@echo off & setlocal 
02.
set "Quelle=D:\DefaultOrdner" 
03.
If "%~1" neq "" set "Quelle=%~1" 
04.
set "Ziel=%Quelle%" 
05.
set "Log=%Quelle%\Konvertierungsfehler.txt" 
06.
for %%i in (%Quelle%\*.csv) do cscript //nologo C:\Scripts\CSV2XLS.vbs "%%i" "%Ziel%">>"%Log%
Diesen Batch kannst Du ohne Parameter aufrufen, dann wird der Default-Ordner (Zeile 2) verwendet oder Du übergibst einen Ordner-Pfad, zB
01.
ConvertCSV2XLS.bat "D:\Ordner mit vielen XLS"
Das Ziehen des Ordners auf die Batchdatei wäre (wie schon angedeutet) eine weitere Möglichkeit.

Weisst du was ich meine???
Ich hatte zumindest eine Vermutung ...

Grüße
bastla
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 15:47 Uhr
Sorry es klappt aber nicht

Immer noch die gleiche Meldung
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 15:53 Uhr
Stoppppppp!!!!!!!!!

Es klappt

Ich hab eine csv die im ordner wie die vbs ist einfach in die vbs reingezogen und er hat daraus eine xls in meinen Zielordner gemacht ;) freuuuu

Kann ich auch mehrere Dateien (csv) markieren und per drag and drop in die vbs ziehen, damit er diese auch mehrfach in xls umwandelt???
Bitte warten ..
Mitglied: bastla
11.09.2007 um 16:05 Uhr
Hallo Bacaaardi!

Kann ich auch mehrere Dateien (csv) markieren und per drag and drop in die vbs ziehen, damit er diese auch mehrfach in xls umwandelt???
In der aktuellen Fassung des Scripts nicht - dafür ist ja die Batchdatei (die ich inzwischen mit Erfolg getestet habe) gedacht.

Versuch es bitte nochmals mit der oben gepostete Version des Batches und ziehe den Ordner auf die Batchdatei ...

Grüße
bastla

P.S.: Heb' Dir vielleicht noch ein paar von den ??? für weitere Fragen auf ...
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 16:10 Uhr
Also du meinst:

@echo off & setlocal
set "Quelle=D:\DefaultOrdner"
If "%~1" neq "" set "Quelle=%~1"
set "Ziel=%Quelle%"
set "Log=%Quelle%\Konvertierungsfehler.txt"
for %%i in (%Quelle%\*.csv) do cscript //nologo C:\Scripts\CSV2XLS.vbs "%%i" "%Ziel%">>"%Log%



als *.vbs speichern und dann einen Ordner mit mehreren csv in diese vbs ziehen???


Brauch ich dann den Quelltext deines 1. Eintrags nicht???


Sorry wenn dir die Fragen blöd erscheinen
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 16:20 Uhr
Es klappppptttttt, freu ;)

Du bist der Beste Bastla, vielen vielen Dank


Jetzt noch eine Frage

Er kopiert mir die xls in genau den Ordner in dem die csv sind
Kann man die xls in einen seperaten Ordner auslagern????

z.B. auf einen andere Platte das er aber die Ordnerstruktur der csv beibehält???

Und kann man die "Konvertierungsfehler.txt" weglassen??
Bitte warten ..
Mitglied: bastla
11.09.2007 um 16:21 Uhr
Hallo Bacaaardi!

Also du meinst:
@echo off & setlocal
...
als *.vbs speichern und dann einen Ordner mit mehreren csv in diese vbs ziehen???
Fast - das ist eine Batchdatei, welche das VB-Script für jede einzelne .csv-Datei des übergebenen Ordners aufruft - daher:
In der letzten Zeile den Pfad zur Scriptdatei (C:\Scripts\CSV2XLS.vbs) gegebenen Falles anpassen und als "CSVKonvertierung.bat" (oder wie immer Du magst) speichern. Auf diese Batchdatei dann den Ordner ziehen.

Sorry wenn dir die Fragen blöd erscheinen
Die stören mich (im Unterschied zu den überzähligen "???" ) überhaupt nicht ...

Grüße
bastla

[Edit] Mal wieder zu langsam getippt ... [/Edit]
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 16:22 Uhr
Es klappppptttttt, freu ;)

Du bist der Beste Bastla, vielen vielen Dank


Jetzt noch eine Frage

Er kopiert mir die xls in genau den Ordner in dem die csv sind
Kann man die xls in einen seperaten Ordner auslagern?

z.B. auf einen andere Platte das er aber die Ordnerstruktur der csv beibehält?

Und kann man die "Konvertierungsfehler.txt" weglassen?



Alles mit einem Fragezeichen ;)
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 16:27 Uhr
Ich weiss ich bin eine Nervensäge ;)


Kann mann mehrere Ordner markieren und über die *.bat umwandeln lassen


Es wäre genial wenn ich einen Ordner in die *.bat ziehe und dort alle Unterordner mit umgewandelt werden

Oder geht das nicht?
Bitte warten ..
Mitglied: bastla
11.09.2007 um 16:33 Uhr
Hallo Bacaaardi!

Jetzt noch eine Frage

Er kopiert mir die xls in genau den Ordner in dem die csv sind
Kann man die xls in einen seperaten Ordner auslagern?

z.B. auf einen andere Platte das er aber die Ordnerstruktur der csv beibehält?
Eigentlich war von vielen .csv in einem Ordner die Rede ...

Ist die Ordnerstruktur auf der anderen Platte identisch (so dass sich also nur der Laufwerksbuchstabe ändern würde)?

Und kann man die "Konvertierungsfehler.txt" weglassen?
Kein Problem - nur werden auf diese Art ev Fehlermeldungen des Scripts "verschluckt".
Weglassen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\DefaultOrdner" 
03.
If "%~1" neq "" set "Quelle=%~1" 
04.
set "Ziel=%Quelle%" 
05.
for %%i in (%Quelle%\*.csv) do cscript //nologo C:\Scripts\CSV2XLS.vbs "%%i" "%Ziel%"
Grüße
bastla

P.S.: Momentan habe ich keine Zeit mehr, vielleicht am Abend ...
Bitte warten ..
Mitglied: Bacaaardi
11.09.2007 um 16:34 Uhr
@ Bastla halt ;)


Mein Chef muss immer nur eine csv umwandeln

Deine Lösung reicht vollkommen ;)


Mein Chef hat eine bat in der viele csv zu einer zuammengefasst werden. Das klappt prima

Jetzt möchter er aus dieser einen csv eine xls. Was du mir ja gezeigt hast und klappt

Ist es möglich diese beiden bat zu kombinieren so das er in einem schritt die csv zu einer zusammenfasst (diese bat bekomm ich per Email noch zugeschickt) und im nächsten Schritt dein bat zum Zuge kommt in dem er aus dieser csv noch die xls macht?
Bitte warten ..
Mitglied: Bacaaardi
12.09.2007 um 08:18 Uhr
Hallo Bastla

in der 2. Zeile habe ich folgendes stehen:

sOutPathDefault = "H:\csv2xls\xls" 'Angabe des Default-Zielpfades ohne abschließenden "\"


wie kann ich den Code ändern, dass die erstellte xls immer im gleichen Ordner wie die csv auftaucht?
Bitte warten ..
Mitglied: bastla
12.09.2007 um 12:44 Uhr
Hallo Bacaaardi!

In diesem Fall könntest Du die Zeile
01.
sOutFilePath = sOutPathDefault 'kein Zielpfad angegeben - Default verwenden
ändern auf
01.
sOutFilePath = Left(sInPath, InStrRev(sInPath, "\") - 1) 'Pfad der Quelldatei verwenden
Grüße
bastla
Bitte warten ..
Mitglied: VW
25.09.2007 um 23:46 Uhr
Moin,

ich setze den Beitrag jetzt mal, da hier ja nichts mehr zu passieren scheint, auf gelöst.

Ansonsten meldet euch einfach per PN.

Mit freundlichen Grüßen,
VW
Bitte warten ..
Mitglied: matthiasr
10.01.2008 um 17:58 Uhr
Hallo,

bin durch Zufall auf Ihr Script gestossen. Genau soetwas habe ich
schon länger gesucht. Ich hätte aber noch ein paar Fragen Ich bin leider kein VBS Profi.

1. Wie bzw. wo kann ich ein anderen FieldDelimiter angeben?
2. Wie kann ich einen Textdelimiter angeben
3. Ich habe hier eine CSV Datei, die hat in einer Spalte Zahlenwerte mit
führender Null. Nach der Konvertierung sind diese Zahlenwerte ohne
führende Null.
Kann man über entsprechende Paramteter evtl. auch die Daten als Text
an Excel übergeben?

Mit freundlichem Gruß

Matthias Rebbe
Bitte warten ..
Mitglied: bastla
11.01.2008 um 01:07 Uhr
Hallo matthiasr und willkommen im Forum!

Anzupassen ist dazu im Script die Zeile
01.
.Workbooks.OpenText sInPath, , , , , , , True 'Delimiter Semicolon = True
Da die Fragestellung sehr allgemein gehalten ist, gelten für die folgende (ungetestete) Beispielzeile folgende Annahmen:

1. FieldDelimiter = |
2. Textdelimiter = '
3. Spalte 4 soll als Text eingelesen werden
01.
.Workbooks.OpenText sInPath, , , , xlTextQualifierSingleQuote, , , , , , True, "|", Array(Array(4, xlTextFormat))
Die entsprechenden Parameter (dokumentiert in der Online-Hilfe zu "OpenText"):

1. "Other" + "OtherChar"
2. "TextQualifyer"
3. "FieldInfo"

Grüße
bastla
Bitte warten ..
Mitglied: matthiasr
11.01.2008 um 15:56 Uhr
Hallo bastla,

vielen Dank.

Ich habe die Zeile jetzt mal angepasst. Meine CSV hat das Semikolon als Fielddelimiter. Wichtig war mir eigentlich, dass ich Spalte 1 als Text übergebe. Daher sieht meine Zeile jetzt so aus:

.Workbooks.OpenText sInPath, , , , xlTextQualifierDoubleQuote ,,, True, , , ,Array(Array(1, xlTextFormat))

Die Excel-Datei wird auch erstellt, aber in Spalte 1 werden immer noch führende Nullen abgeschnitten.

Habs mit Excel 2002 u. Excel 2007 probiert.

Bin echt ratlos.

Gruß

Matthias
Bitte warten ..
Mitglied: bastla
11.01.2008 um 18:56 Uhr
Hallo matthiasr!

Versuch es mit folgender Zeile:
01.
.Workbooks.OpenText sInPath, , , , , , , True, , , , , Array(Array(1, 2))
Den Textdelimiter brauchst Du nicht anzugeben, da "DoubleQuote" ohnehin Default ist. Leider hatte ich nicht daran gedacht, dass VBS natürlich keine "xl"-Konstanten kennt - daher ist also "xlTextFormat" durch den zugehörigen Wert 2 zu ersetzen (oder die Zeile
01.
Const xlTextFormat = 2
in das Script zu integrieren) ...

Falls Du doch einmal die Angabe des Textdelimiters benötigen solltest:
01.
Const xlTextQualifierDoubleQuote = 1 
02.
Const xlTextQualifierSingleQuote = 2 
03.
Const xlTextQualifierNone = -4142
Grüße
bastla
Bitte warten ..
Mitglied: matthiasr
11.01.2008 um 20:16 Uhr
Super,

vielen Dank. Jetzt funktioniert es.

Ich glaube, ich werde mich doch mal ein bisschen mehr mit VBS beschäftigen müssen.

Gruß

Matthias
Bitte warten ..
Mitglied: VW
11.01.2008 um 20:17 Uhr
Moin,

denn setz ich gelöst erstmal wieder.
Oder gibt es noch irgendwelche weiteren offenen Fragen?

Mit freundlichen Grüßen,
VW
Bitte warten ..
Mitglied: DoctorGremlin
08.10.2008 um 23:11 Uhr
Hallo,

ich bin durch Zufall gerade auf dieses Script gestoßen, da ich auf der Suche nach einer Lösung für mein Problem bin. Ich versuchs mal zu Schildern:

Momentan bekomme ich jeden Tag mehrere Geschäftsemails auf mein iPhone, mit csv-Anhängen, die zeitnah kontrolliert werden müssen. Da das Handy aber kein csv im Emailanhang lesen kann, muss ich auf ein anderes, brauchbares Format umschwenken. Ich hab mir hier mal frecherweise das vbs-Script kopiert und ausprobiert, und bin erfolgreich gewesen, allerdings brauche ich nun Hilfe, um das ganze weiter zu automatisieren.

Erstmal den Ist-Stand:

Ich habe in einem Entfernten Rechenzentrum eine Anwendung laufen, das mir mehrfach täglich eine csv-Datei generiert (immer zu festen Uhrzeiten), und diese anschliessend direkt per Email an mehrere Adressen versendet. Diese sind aber leider nur am PC lesbar, nicht am iPhone (Diensthandy).

Wunschzustand:

Die Anwendung generiert die besagte csv-Datei und legt diese in ein definiertes Verzeichnis ab (leicht konfigurierbar). In genau dieses Verzeichnis soll der Konverter mit hinein, und ebenfalls zu festen Zeitpunkten (am besten kurz nach Ablage der csv-Datei in diesem Verzeichnis) alle csv-Dateien (ich sag bewusst alle, da morgens 2 Dateien abgelegt werden und nachmittags 1), die maximal 1 Stunde dort liegen, und generiert hieraus die entsprechenden Excel-Dateien. Jetzt wiederum müssten automatisiert die frisch erzeugten Excel-Dateien aufgegriffen und per Mail an ihren Bestimmungsort geschickt werden.

Wenn jemand Lust hat, mir hier ein bißchen unter die Arme zu greifen, wäre ich da sehr sehr dankbar für.

Gruß,
Thomas
Bitte warten ..
Mitglied: bastla
08.10.2008 um 23:20 Uhr
Hallo Doctor Gremlin!

Dafür bietet sich eher ein neuer Thread an ...

Grüße
bastla
Bitte warten ..
Mitglied: DoctorGremlin
08.10.2008 um 23:22 Uhr
Hallo Bastla,

insgeheim hatte ich auf eine schnelle Antwort von Dir gehofft, allerdings eher in Form einer Lösung.
Ich wollte es hier in dem Thread eigentlich halten, da hier auch der Quellcode von dem Konverter mitgenannt ist.
Bitte warten ..
Mitglied: bastla
08.10.2008, aktualisiert 18.10.2012
Hallo Doctor Gremlin!

Wenn das Script offensichtlich bei Dir funktioniert, ist eigentlich der Quellcode kein Thema ...

... abgesehen davon: Der Batch (aus meinem ersten Kommentar), mit dem alle Dateien eines Ordners umgewandelt werden können, sollte sich ja an Deine Ordnerstruktur anpassen und dann über den Taskplaner starten lassen, sodass Du nur noch am Ende des Batches einen Aufruf von zB "blat.exe" (ein Beispiel findest Du hier) ergänzen musst, um damit die konvertierten Dateien zu versenden.

Grüße
bastla
Bitte warten ..
Mitglied: DoctorGremlin
09.10.2008 um 11:09 Uhr
Hallo Bastla,

danke für die Tips, die Batchdatei hatte ich komplett übersehen, funktioniert mit kleinen Anpassungen sehr gut. Allerdings werde ich vor ein Rätsel gestellt.
Ich bekomme täglich 3 Dateien, 2 vormittags und eine nachmittags. Diese werden aus der selben Vorlage erstellt, und mit unterschiedlichen Daten gefüllt.

Morgens hat eine Datei zB hat 37 Zeilen und 18 Spalten, die andere 37 Zeilen und 8 Spalten. Nachmittags die Datei hat wiederrum 37 Zeilen und 18 Spalten.

Morgens die 8er Datei und nachmittags die 18er Datei werden perfekt konvertiert nach XLS, aber die morgens 18er Datei geht in die Hose, da drückt er mir sämtliche Inhalte in Spalte A, warum auch immer.

Anschliessender Datenversand geht auch reibungslos mit blat.
Bitte warten ..
Mitglied: bastla
09.10.2008 um 11:50 Uhr
Hallo Doctor Gremlin!

die morgens 18er Datei geht in die Hose, da drückt er mir sämtliche Inhalte in Spalte A
Da drängt sich natürlich die Frage nach dem Trennzeichen auf ...

Grüße
bastla
Bitte warten ..
Mitglied: DoctorGremlin
09.10.2008 um 13:18 Uhr
Hi,
Trennzeichen ist immer ein Semikolon, und in allen Dateien gleich.
Bitte warten ..
Mitglied: bastla
09.10.2008 um 14:33 Uhr
Hallo Doctor Gremlin!

Ev Unicode? Falls ja (und sich tatsächlich das Problem daraus ergäbe), ließe sich durch ein vorangehendes
01.
type Datei.csv>Datei.bak 
02.
move Datei.bak Datei.csv
eine Konvertierung nach ANSI in den Batch einbauen.
Wenn Du die Datei mit einem vernünftigen Texteditor (etwa Notepad++) oder einem Hexeditor öffnest, kannst Du Dir auch enthaltene Sonderzeichen anzeigen lassen (in Notepad++: "Ansicht / Alle Zeichen anzeigen") und so ev Auffälligkeiten erkennen - eine Ferndiagnose ist etwas schwierig ...

Grüße
bastla
Bitte warten ..
Mitglied: DoctorGremlin
10.10.2008 um 09:59 Uhr
Hallo Bastla,

ich hab es zwischenzeitlich gelöst bekommen, ich habe die Anzahl der "freiwillig" mitgelieferten Infos ein wenig reduziert, und jetzt funktioniert es.

Jetzt brauch ich nur noch eine Möglichkeit, in der Batchdatei, die die Konvertierung ausführt, das blat-Kommando mit einzubauen, damit ich nur einen Task planen muss.
Eine Idee dazu?

Momentan sieht es so aus, aber geht leider nicht:

@echo off & setlocal
set "Quelle=c:\test\CSVerstellt"
set "Ablage=c:\test\CSVkonvertiert"
set "Ziel=c:\test\XLSerstellt"
set "Log=c:\test\Konvertierungsfehler.txt"
if not exist "%Ablage%" md "%Ablage%"
for %%i in (%Quelle%\*.csv) do call :ProcessFile "%%i"
goto :eof
:ProcessFile
cscript //nologo C:\test\CSV2XLS.vbs %1 "%Ziel%">>"%Log%" || goto :eof
move %1 "%Ablage%"
goto :eof
@echo
c:\test\blat262\full\blat.exe .... (persönliche Infos weggelassen, aber der Emailversand mit Anhängen funktioniert).

Wenn Du mir das noch kurz erklären würdest, wie ich das hinbekomme, hättest Du mir seeeehr viel weitergeholfen.

Und ein hausgemachtes Problem hab ich noch, auf dem Rechner, wo das Script dann laufen soll, ist kein Excel installiert (wegen Lizenzgründen). Gibt es eine Möglichkeit, das auch ohne installiertes Excel zum laufen zu bewegen? (Die Anfrage für das Installieren läuft momentan, ist aber mit Kosten verbunden, die man ja evtl. umgehen könnte). Wenn es keine Möglichkeit ohne Excel gibt, muss es halt gekauft und installiert werden, daran solls nicht scheitern, aber evtl. geht es ja ohne.

Gruß,
Doc
Bitte warten ..
Mitglied: DoctorGremlin
10.10.2008 um 10:24 Uhr
Ok hat sich erledigt, hab es rausbekommen, ohne den passenden Call konnte das ja nicht gehen. Ich gebe zu, meine Programmierkenntnisse sind ein wenig eingerostet...

Hiermit ging es dann in einem Aufruf:

@echo off & setlocal
set "Quelle=c:\test\CSVerstellt"
set "Ablage=c:\test\CSVkonvertiert"
set "Ziel=c:\test\XLSerstellt"
set "Log=c:\test\Konvertierungsfehler.txt"
if not exist "%Ablage%" md "%Ablage%"
for %%i in (%Quelle%\*.csv) do call :ProcessFile "%%i"
call :email
goto :eof
:ProcessFile
cscript //nologo C:\test\CSV2XLS.vbs %1 "%Ziel%">>"%Log%" || goto :eof
move %1 "%Ablage%"
goto :eof
:email
c:\test\blat262\full\blat.exe...

Bleibt nun noch die Frage nach der Ausführbarkeit ohne Excel offen...
Bitte warten ..
Mitglied: frentic
16.12.2015 um 10:35 Uhr
Hallo Bastla,

das Script ist super, leider habe ich ein Problem, dass in der erzeugten Excel-Datei die Umlaute nicht passen.
Kannst du mir helfen?

cu Frentic
Bitte warten ..
Mitglied: bastla
LÖSUNG 16.12.2015, aktualisiert 24.12.2015
Hallo frentic und willkommen im Forum!

Lässt sich ohne konkrete Kenntnis Deiner csv-Datei natürlich nicht nachvollziehen - was Du aber versuchen könntest, wäre, in Zeile 52 unmittelbar nach dem "sInPath" die Herkunft der Daten festzulegen - anstatt
.Workbooks.OpenText sInPath, , , , , , , True
zB
.Workbooks.OpenText sInPath, 2, , , , , , True
wenn die Ausgangsdatei im "MSDOS-Format" (also als ASCII) erstellt wurde.

Alternativ zu "2" kann dort auch die Codepage angeführt werden - dazu könntest Du die csv-Datei auf *.txt umbenennen und sie dann mit Excel öffnen. Im automatisch startenden Textkonvertierungsassistenten wirst Du nach dem "Dateiursprung" gefragt. Hier kannst Du dann verschiedene Einstellungen ausprobieren und siehst in der Vorschau auch gleich, ob es damit passt. Wenn Du die Herkunft herausgefunden hast, kannst Du die vor dem Doppelpunkt stehende Zahl (zB 852 für "Mitteleuropäisch (DOS)") in der obigen Zeile als Codepage verwenden ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
CSV Stapelverarbeitung mit Filterfunktion für große Datenmengen (8)

Frage von Rippchen zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 Csv -Dateien zum Teil zusammenfügen (6)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...