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

Optimierung VB Script - Exceldatei einlesen und bearbeiten und als CSV speichern

Frage Entwicklung Visual Studio

Mitglied: chef1568

chef1568 (Level 1) - Jetzt verbinden

28.10.2014, aktualisiert 02.11.2014, 1528 Aufrufe, 4 Kommentare

Hallo,

ich habe ein VB Script erstellt, dass eine XLS einliest und alle Werte in einem Array speichert.
Hintergrund: Ich habe des Öfteren Dateien die ich im XML-Format erhalte. Diese muss ich etwas bearbeiten (suchen/ersetzen) und im CSV-Format ablegen.
Daher ist es mir nicht möglich dies über ein Excel-Makro zu lösen.

Leider ist es derzeit so dass das Script nur für das Einlesen der Werte schon ewig benötigt - das parsen der Daten ist hierbei noch gar nicht integriert!


01.
dim arrImport() 		'Importarray aus Downloaddatei 
02.
dim r, c			'temp Zähler Row/Column 
03.
dim path, filename		'Pfad zum Ablageort der Downloaddatei 
04.
dim usedColumn, usedRow 
05.
 
06.
'Defaultwerte setzen 
07.
path = "C:\Users\######\AppData\Local\Temp\Scripting\" 
08.
filename = "excelexport_12175_2.xls" 
09.
usedColumn = 0 
10.
usedRow = 0 
11.
 
12.
'Erzeuge Objekt 
13.
Set objXLS = WScript.CreateObject("Excel.Application") 
14.
objXLS.Workbooks.open path + filename 
15.
 
16.
'Ermittlung der verwendeten Spalten/Zeilen 
17.
do While not objXLS.Cells(1, usedColumn + 1) = "" 
18.
	usedColumn = usedColumn + 1 
19.
loop 
20.
Do While Not objXLS.Cells(usedRow + 1, 1) = "" 
21.
	usedRow = usedRow + 1 
22.
loop 
23.
 
24.
'Import der Tabelle in ein Array 
25.
ReDim arrImport(usedRow,usedColumn) 
26.
for r = 1 to usedRow 
27.
	for c = 1 to usedColumn 
28.
		arrImport(r,c) = objXLS.Cells(r,c) 
29.
	next 
30.
next 
31.
 
32.
' Testausgabe 
33.
msgbox usedColumn 
34.
msgbox usedRow 
35.
msgbox arrImport(13060,1) 
36.
 
37.
set objXLS = nothing


Problem 1
Ber Bereich unter "Ermittlung der verwendeten Spalten/Zeilen"benötigt schon ziemlich lange da ich Zelle für Zelle überprüfe - hat jemand eine performantere Lösung?

Problem 2
Der Import der Daten in das Array benötigt gefühlt ewig...

Problem 3
Selbst wenn das Script beendet und mit "nothing" wurde wird die Datei anscheinend noch weiterhin verwendet (im Task Manager ist Excel.exe auch noch aktiv)



Ich wäre für Optimierungsvorbschläge sehr dankbar
gruß feder
Mitglied: colinardo
LÖSUNG 28.10.2014, aktualisiert 29.10.2014
Hallo Feder,
zu Problem 1 und 2:
einen Range kannst du ziemlich einfach in ein Array wandeln. In deinem Fall reicht hier folgendes:
01.
dim arrImport, objXLS, objWB, path, filename 
02.
path = "C:\Users\######\AppData\Local\Temp\Scripting\" 
03.
filename = "excelexport_12175_2.xls"  
04.
Set objXLS = CreateObject("Excel.Application") 
05.
'Eventuelle Dialoge/Warnmeldungen unterdrücken 
06.
objXLS.DisplayAlerts = False 
07.
set objWB = objXLS.Workbooks.open(path & filename) 
08.
 
09.
'Bereich in Array kopieren 
10.
arrImport = objWB.Worksheets(1).UsedRange 
11.
 
12.
'Testdaten aus Array ausgeben 
13.
msgbox arrImport(100,1)  
14.
 
15.
'Workbook und Excel schließen 
16.
objWB.Close false 
17.
objXLS.DisplayAlerts = True 
18.
objXLS.Quit 
19.
 
20.
Set objWB = Nothing 
21.
Set objXLS = Nothing
zu Problem 3:
Schließe das Excel-Workbook und die Applikation korrekt, siehe oben.

Grüße Uwe
Bitte warten ..
Mitglied: chef1568
28.10.2014 um 23:51 Uhr
Hallo colinardo,

dein Script liest sich gut - funktioniert allerdings nicht.
Zeile 9: Typenkonflikt

wenn ich arrImport() verwende kommt die Meldung: ausserhalb des gültigen Bereichs


Mit freundlichen Grüßen
Bitte warten ..
Mitglied: colinardo
29.10.2014, aktualisiert um 00:11 Uhr
Zitat von chef1568:
dein Script liest sich gut - funktioniert allerdings nicht.
Zeile 9: Typenkonflikt
läuft hier problemlos ...

ausserhalb des gültigen Bereichs
Das Array das übergeben wird ist nicht 0-basiert sondern 1-basiert. Du versucht hier vermutlich einen nicht existenten Arraywert auszugeben.
Bitte warten ..
Mitglied: chef1568
29.10.2014 um 00:12 Uhr
Ja, das Script funktioniert jetzt.
Ich hatte noch die Variablendeklaration drinnen^^

Danke für deine Hilfe
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

VB for Applications
gelöst Excel mit VBS bearbeiten und Speichern Unter (8)

Frage von Yannosch zum Thema VB for Applications ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...