fugu
Goto Top

WPS to DOC Batch bzw. VB Convert

Moin Com!

Ich habe mal wieder ein "Bastler-Problem" und hoffe, es gibt jemanden, der mit mit einem "Zweizeiler" viel Zeit ersparen kann face-wink

Wir haben ein altes Archiv von knapp 6000 Works-Dateien (.wps Works Version 4).
Bisher war das alles kein Problem - auf den alten Rechnern mit XP, installiertem Works 9 und Office 2007 ließen sich die Dateien problemlos öffnen. Auf den neuen PCs mit Win7x64 und Office 2013 gibt es allerdings Fehlermeldungen (Dateien wären zerstört und nicht konvertierbar).

Die üblichen Verdächtigen (Word 2003 Viewer, Microsoft Works Convertor Plugin) habe ich durch. Ich bekomme auf den neuen PCs die alten Dateien nicht mehr geöffnet.

Jetzt steht da noch ein alter PC in alter Konfiguration, der alle Dateien öffnen kann. Es gibt ein Batch-Plugin für Word ab 2010, welches WPS zu DOC konvertiert (http://www.gmayor.com/works_batch_converter.htm) Leider läuft das tatsächlich nicht unter Office 2007 und Office 2013 bekomme ich auf der alten XP-Dose nicht installiert.

So.

Was funktioniert ist:
Auf der alten XP-Dose die WPS-Datei öffnen und über den Speichern-Unter-Dialog die Konvertierung zu DOC manuell machen. Das ist aber bei der Datenmenge mehr als eine Sisyphusarbeit.

Gibt es evtl. über VB eine Möglichkeit das "Datei öffnen und Speichern unter" auf einen ganzen Ordner zu automatisieren?

Vielen Dank im voraus

Greetz, Fugu

Content-ID: 230830

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

Printed on: December 13, 2024 at 03:12 o'clock

colinardo
Solution colinardo Feb 24, 2014 updated at 14:07:44 (UTC)
Goto Top
Hallo Fugu,
z.B. mit folgendem VBS-Script:
(Zeile 2 = Pfad zu den WPS-Dateien / Zeile 4 = Ordner in dem die DOC-Dateien landen / Zeile 6 = Pfad zu einer LOG-Datei)
Sollen die Word-Fenster während des Vorgangs nicht immer aufpoppen und das ganze "Silent" ablaufen, kann dies in Zeile 15 mit Änderung auf False festgelegt werden.

Code in einer Textdatei mit der Endung *.vbs speichern, ausführen... freuen face-wink
'Pfad zu den WPS Dokumenten  
strPathWPS = "C:\wps"  
'Pfad zu den DOCs  
strPathDOC = "C:\doc"  
'Logfile für eventuell auftretende Fehler  
strPathLogfile = "c:\logfile.txt"  
'Erweiterungen der Dateien die bearbeitet werden sollen  
arrFileExtensions = Array("wps")  

Set fso = Wscript.CreateObject("Scripting.Filesystemobject")  
Set objWord = WScript.CreateObject("Word.Application")  
Set objShell = CreateObject("Wscript.Shell")  
Dim intDocCount, intErrCount
'Applikation anzeigen und eventuelle Dialoge für Batchbetrieb unterdrücken  
objWord.Visible = True
objWord.DisplayAlerts = 0
'Im Ordner Rekursiv alle Word-Dokumente verarbeiten  
parseFolders fso.GetFolder(strPathWPS), True
'Das Anzeigen von Benachrichtigungen wieder aktivieren und Word schließen  
objWord.DisplayAlerts = -1
objWord.Quit True
Set fso = Nothing
Set objWord = Nothing
If intErrCount = 0 Then
	MsgBox "Es wurden insgesamt " & intDocCount & " Dokumente verarbeitet.", vbInformation, "Verarbeitung abgeschlossen"  
Else
	MsgBox "Es wurden insgesamt " & intDocCount & " Dokumente verarbeitet." & vbCrLf & "Davon ist bei " & intErrCount & " Dokumenten ein Fehler aufgetreten!", vbInformation, "Verarbeitung abgeschlossen"  
	objShell.Run "Notepad.exe " & strPathLogfile  
End If

'Ende  

Function parseFolders(fldr, boolRecursion)
    For Each file In fldr.Files
    	For i = 0 To UBound(arrFileExtensions)
			If LCase(arrFileExtensions(i)) = LCase(fso.GetExtensionName(file.Path)) Then
				intDocCount = intDocCount + 1 
	            'Fehlerbehandlung für den Fall das ein Fehler beim Öffnen eines Dokumentes auftritt  
	            On Error Resume Next
	            Set objDoc = objWord.Documents.Open(file.Path)
	            If Err.Number <> 0 Then
	            	intErrCount = intErrCount + 1
	            	WriteLog "!!ERROR!! Fehler beim öffnen der Datei: -> '" & file.Path & "'"  
	            Else
	            	objDoc.SaveAs strPathDOC & "\" & fso.GetBaseName(file.Name) & ".docx" ,16  
	            	objDoc.Close True
	            	WriteLog "Dokument wurde konvertiert: ->'" & file.Path & "'"  
	            End if
	            Exit For
	         End If
		Next
    Next
    
    'Funktion wird rekursiv aufrufen wenn das durchsuchen aller Unterordner gewünscht ist  
    If boolRecursion Then
		For Each subFolder in fldr.SubFolders
			parseFolders subFolder, True
		Next
	End If
End Function

Function WriteLog(strText)
	Set objLog = fso.OpenTextFile(strPathLogfile,8,True)
	logline = Now & " - " & strText  
	objLog.WriteLine(logline)
	objLog.Close
End Function
Grüße Uwe
fugu
fugu Feb 24, 2014 at 14:08:30 (UTC)
Goto Top
*niederknie* unglaublicher "Zweizeiler" face-wink

Vielen Dank!