Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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

CSV Daten in Excel umwandeln per VBS Script

Frage Entwicklung

Mitglied: Quercus

Quercus (Level 1) - Jetzt verbinden

05.05.2012, aktualisiert 17:18 Uhr, 4766 Aufrufe, 4 Kommentare

Moin,

unten aufgeführtes script habe ich hier aus dem Forum gefunden welches dann mit hilfe von Bastla noch verfeinert wurde ;)
funktionierte auch soweit mit meinen alten csv Daten einwandfrei, nun hat sich die ausgabe Datei in der CSV Datei leider in Spalte 3 geändert (der Matchcode ist in der Ausgabe weggefallen, dieser war mit den Daten in Anführungszeichen "blabla" formatiert.)

um konstruktive Hilfe wäre ich sehr Dankbar ;)

Hier das VBS Script welches ich momentan in verwendung habe:

01.
'CSV2XLS.vbs 
02.
sOutPathDefault = "C:\test\KonvertierteCSV" '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, , , , ,Array(Array(1, 1),Array(2, 2))	 
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.
	 
63.
End With 
64.
CleanUp 
65.
 
66.
Sub CleanUp 
67.
oXL.Quit 
68.
Set oXL = Nothing 
69.
If LCase(sInFileType) = ".csv" Then 
70.
	On Error Resume Next 
71.
	fso.DeleteFile sInPathTemp 'temporäre Import-Datei zu löschen versuchen 
72.
End If 
73.
End Sub
dazu noch die Aufruf bat in die ich dann die csv Datei ziehe:
01.
@echo off & setlocal 
02.
set "Quelle=C:\test\ZuKonvertierendeCSV" 
03.
set "Ablage=C:\test\KonvertierteCSV" 
04.
set "Ziel=C:\test\AusCSVKonvertierteXLS" 
05.
set "Log=C:\test\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:\test\Scripts\CSV2XLS.vbs %1 "%Ziel%">>"%Log%" || goto :eof 
11.
move %1 "%Ablage%" 
12.
goto :eof
bei dieser CSV Datei funktioniert das Script wie gewünscht mit der Ausgabe:
Zeile 1 beinhaltet die Namen der Spalten hier leider mit Zeilenumbruch dargestellt da sonst im Forum nicht ganz angezeigt.
01.
Mandant;Artikelnummer;Matchcode;USER_DEL;USER_RV;USER_Zollnummer;USER_EClass;USER_nnnWay;USER_aaaaKat;USER_bbbKatalog;USER_ccKat;USER_TDM;USER_dddKatalog;USER_fff;USER_PDF;USER_ggggg512;USER_hhhhhheinsatzgewicht;USER_PRICAT; 
02.
USER_QUANTITYMIN;USER_Gewichtaktuell;USER_iiiiiiiSachnr;USER_Lieferzeitkkkkkkk;USER_lllllllLager;USER_Druckunterbinden;USER_ArtikelnummerExtern;USER_ArtikelVarianteExtern;USER_IstPackstueck;USER_ColliUmrechnung;USER_IstExportiert2MDE;USER_PickPlatzID; 
03.
USER_MengenvorschlagMDE;USER_Etikett;USER_EtikettDrucker;USER_EtikettBericht;USER_EtikettEK;USER_EtikettVK;USER_EtikettPreis;USER_AnzahlEtikettenDef;USER_MDEKeineFreigabe;USER_mmmmmmmmm 
04.
1;"000001";"10/25mm/1:10=8,9/plan";0;;;;0;0;0;0;0;0;0;;;0,00;;0,00;0;;;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0
mit meiner neuen CSV Datei leider nicht mehr: Einzige änderung ist das der "matchcode" nicht mehr vorhanden ist
Zeile 1 beinhaltet die Namen der Spalten hier leider mit Zeilenumbruch dargestellt da sonst im Forum nicht ganz angezeigt.

01.
Mandant;Artikelnummer;USER_DEL;USER_RV;USER_Zollnummer;USER_EClass;USER_nnnWay;USER_aaaaKat;USER_bbbKatalog;USER_ccKat;USER_TDM;USER_dddKatalog;USER_fff;USER_PDF;USER_ggggg512;USER_hhhhhheinsatzgewicht;USER_PRICAT; 
02.
USER_QUANTITYMIN;USER_Gewichtaktuell;USER_iiiiiiiSachnr;USER_Lieferzeitkkkkkkk;USER_lllllllLager;USER_Druckunterbinden;USER_ArtikelnummerExtern;USER_ArtikelVarianteExtern;USER_IstPackstueck;USER_ColliUmrechnung;USER_IstExportiert2MDE;USER_PickPlatzID; 
03.
USER_MengenvorschlagMDE;USER_Etikett;USER_EtikettDrucker;USER_EtikettBericht;USER_EtikettEK;USER_EtikettVK;USER_EtikettPreis;USER_AnzahlEtikettenDef;USER_MDEKeineFreigabe;USER_mmmmmmmmm 
04.
1;"000001";0;;;;-1;;;;;;;;;0,00;;;;;;;;;;0;;0;;;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
05.
1;"000274";0;;;;0;0;0;0;0;0;0;;;0,60;;0,00;0;"F365290521361";;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
06.
1;"000302";0;;;"27-06-04-04";0;0;0;0;0;0;0;;;0,00;;0,00;-1;"B883380534643";;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
07.
1;"100192";0;;;"27-06-20-08";-1;0;0;0;0;0;0;;;1,45;11.03.2011;5,00;0;"B883330527547";30;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
08.
1;"100214";0;;;;0;0;0;-1;0;0;0;;"21089190";0,30;01.02.2012;1,00;0;;;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0;
[Edit Biber] Codeformatierung nachgetragen [/Edit]
Mitglied: bastla
05.05.2012 um 12:03 Uhr
Hallo Quercus!

Die Darstellung "am Stück" kannst Du mit "Code"-Formatierung erreichen - das sähe dann so
01.
Mandant;Artikelnummer;Matchcode;USER_DEL;USER_RV;USER_Zollnummer;USER_EClass;USER_nnnWay;USER_aaaaKat;USER_bbbKatalog;USER_ccKat;USER_TDM;USER_dddKatalog;USER_fff;USER_PDF;USER_ggggg512;USER_hhhhhheinsatzgewicht;USER_PRICAT;USER_QUANTITYMIN;USER_Gewichtaktuell;USER_iiiiiiiSachnr;USER_Lieferzeitkkkkkkk;USER_lllllllLager;USER_Druckunterbinden;USER_ArtikelnummerExtern;USER_ArtikelVarianteExtern;USER_IstPackstueck;USER_ColliUmrechnung;USER_IstExportiert2MDE;USER_PickPlatzID;USER_MengenvorschlagMDE;USER_Etikett;USER_EtikettDrucker;USER_EtikettBericht;USER_EtikettEK;USER_EtikettVK;USER_EtikettPreis;USER_AnzahlEtikettenDef;USER_MDEKeineFreigabe;USER_mmmmmmmmm 
02.
1;"000001";"10/25mm/1:10=8,9/plan";0;;;;0;0;0;0;0;0;0;;;0,00;;0,00;0;;;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0
bzw so
01.
Mandant;Artikelnummer;USER_DEL;USER_RV;USER_Zollnummer;USER_EClass;USER_nnnWay;USER_aaaaKat;USER_bbbKatalog;USER_ccKat;USER_TDM;USER_dddKatalog;USER_fff;USER_PDF;USER_ggggg512;USER_hhhhhheinsatzgewicht;USER_PRICAT;USER_QUANTITYMIN;USER_Gewichtaktuell;USER_iiiiiiiSachnr;USER_Lieferzeitkkkkkkk;USER_lllllllLager;USER_Druckunterbinden;USER_ArtikelnummerExtern;USER_ArtikelVarianteExtern;USER_IstPackstueck;USER_ColliUmrechnung;USER_IstExportiert2MDE;USER_PickPlatzID;USER_MengenvorschlagMDE;USER_Etikett;USER_EtikettDrucker;USER_EtikettBericht;USER_EtikettEK;USER_EtikettVK;USER_EtikettPreis;USER_AnzahlEtikettenDef;USER_MDEKeineFreigabe;USER_mmmmmmmmm 
02.
1;"000001";0;;;;-1;;;;;;;;;0,00;;;;;;;;;;0;;0;;;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
03.
1;"000274";0;;;;0;0;0;0;0;0;0;;;0,60;;0,00;0;"F365290521361";;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
04.
1;"000302";0;;;"27-06-04-04";0;0;0;0;0;0;0;;;0,00;;0,00;-1;"B883380534643";;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
05.
1;"100192";0;;;"27-06-20-08";-1;0;0;0;0;0;0;;;1,45;11.03.2011;5,00;0;"B883330527547";30;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0; 
06.
1;"100214";0;;;;0;0;0;-1;0;0;0;;"21089190";0,30;01.02.2012;1,00;0;;;0;0;;;0;0,00;0;;0,00;0;"Zebra TLP2824 Plus - ZPL";"rptEtikett_ArtNr_REMA_5x3";;;-1;1;0;
aus.

Mit Deinem geposteten Script und beiden Testdateien erhalte ich (mit Excel 2007) vernünftig aussehende Ergebnisse - daher kann ich das Problem nicht nachvollziehen ...

Grüße
bastla
Bitte warten ..
Mitglied: Quercus
05.05.2012 um 12:26 Uhr
Hallo Bastla,

hab es gerade mit dem hier geposteten testdaten als neu erstellte CSV datei probiert. hier komm ich auf gleiches ergebnis wie du.

nur mit der orginal erstellten csv Datei die aus einem Programm uns erstellt wird hab ich die probleme!

leider kann ich hier keine XLS Dateien anhängen sonst würdest du sehen das die Daten verschoben sind gegenüber dem orginal wenn ich die Csv über Ecxel importieren kann.


verwende Excel 2007 und 2010 bei beiden das darstellungsproblem...
Bitte warten ..
Mitglied: bastla
05.05.2012 um 13:35 Uhr
Hallo Quercus!

Aus mir unbekannten Gründen wird bei beim Import die neue CSV nicht automatisch als "Getrennt" zu zerlegen interpretiert - ändere daher im Script auf
	.Workbooks.OpenText sInPath, , , 1, , , , True, , , , ,Array(Array(1, 1),Array(2, 2))
Grüße
bastla
Bitte warten ..
Mitglied: Quercus
05.05.2012 um 13:44 Uhr
Hallo Bastla,


merci das ist die lösung


verbeug und noch ein schönes Wochenende wünsche


Gruß

Quercus
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
gelöst Excel csv-Import Zeichensatz-Problem (2)

Frage von thaefliger zum Thema Microsoft Office ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

VB for Applications
Einzelne daten aus verschiedenen csv dateien in eine excel zusammenfügen (4)

Frage von K1200R zum Thema VB for Applications ...

Batch & Shell
CSV-Datei nach Excel importieren (5)

Frage von mrvfbnummer2 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Viren und Trojaner

FinFisher: Internetprovider schieben Spitzelopfern Malware unter

(1)

Information von kaiand1 zum Thema Viren und Trojaner ...

Humor (lol)

Wo ist der Fehler auf dem Bild?

(17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Update

Offenbar erneutes MS-Update mit Fehlerschleife (2012 R2)

Information von VGem-e zum Thema Windows Update ...

Heiß diskutierte Inhalte
Lizenzierung
Programm soll in verschiedenen Versionen lizenziert sein (20)

Frage von Yanmai zum Thema Lizenzierung ...

Humor (lol)
Wo ist der Fehler auf dem Bild? (17)

Information von the-buccaneer zum Thema Humor (lol) ...

Virtualisierung
Unterschied zwischen VDI und Terminal Server Lösungen (13)

Frage von tukawi06 zum Thema Virtualisierung ...