Massenkonvertierung ods in xls

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

LoHan
Beiträge: 2
Registriert: Mo, 08.05.2006 15:06
Wohnort: Surwold

Massenkonvertierung ods in xls

Beitrag von LoHan »

Hallo!

Ich habe hier eine CD-ROM mit ca. 500 Dateien im ods-Format bekommen, die jetzt von jemand anderem mit Excel weiterbearbeitet werden sollen. Auf der Suche nach Lösungen bin ich in diesem Forum auf ein etwas älteres Makro gestoßen, dass sxc-Dateien nach xls umwandelt. In dem Script habe ich einfach die Dateiendungen entsprechend geändert. Aber leider bekomme ich als Meldung immer nur, dass 0 Dateien konvertiert wurden. :(

Kann mir jemand sagen, ob da noch weitere Änderungen nötig sind? Vielleicht liegt es nur an einer Kleinigkeit. Kenntnisse vom Programmieren habe ich nur sehr wenige.


Hier das Script aus dem Forum. Ich habe aus sxc einfach ods gemacht. Nicht ganz klar sind mir die Pfadangaben für Input und Output. Vielleicht liegt hier noch ein Fehler. Die OO-Version ist 2.0.2

Code: Alles auswählen

Sub Main
Dim Dispatcher As Object
Dim Datei As String
Dim InputPath As String
Dim OutputPath As String
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim z As Integer

rem Variablen initialisieren
dim args()
Dim args2(0) as new com.sun.star.beans.PropertyValue
Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
InputPath = "file:///X:/ods/"
OutputPath = "file:///X:/xls/"
a = 0
b = 0
c = 0
z = 0

While a < 2
    b = 0
    While b < 10
        c = 0
        While c < 10
            Datei = "File" & a & b & c
            If FileExists(InputPath & Datei & ".ods") Then
                Document_in = StarDesktop.LoadComponentFromURL(InputPath & Datei & ".ods", "_blank", 0, args())
                'Dispatcher.executeDispatch(Document_in, ".uno:Open", "", 0, Array())

                'Set Document_out   = ThisComponent.CurrentController.Frame
                'args2(0).Name = "URL"
                'args2(0).Value
                sUrl = OutputPath & Datei & ".xls"
                args2(0).Name = "FilterName"
                args2(0).Value = "MS Excel 97"
                Document_in.storeAsUrl(sUrl, args2())
                'Dispatcher.executeDispatch(document_in, ".uno:SaveAs", "", 0, args2())
                MsgBox "Die Datei " & Datei & ".ods wurde als " & Datei & ".xls unter " & OutputPath & " gespeichert." , 64, "Hinweis"
                Document_in.close(-1)
                z = z + 1
            EndIf
            c = c + 1
        Wend
        b = b + 1
    Wend
    a = a + 1
Wend
MsgBox "Es wurden " & z & " Dateien umgewandelt.", 64, "Abschluss"
End Sub
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Code: Alles auswählen

Sub konvertieren()
Dim FileProp(0) As New com.sun.star.beans.PropertyValue
FileProp(0).Name="FilterName"
FileProp(0).Value="MS Excel 97"
auswahl = createunoservice("com.sun.star.ui.dialogs.FolderPicker")
auswahl.execute
pfad = auswahl.directory & "/" 
x = Dir(pfad & "*.ods")
If x <> "" Then
	Do
		dok = StarDesktop.LoadComponentFromURL _
			(ConvertToURL(pfad & x), "_blank", 0, args())
		URL = dok.URL
		URL = LEFT(URL, LEN(URL)-3) & "xls"
		dok.storeAsUrl(URL,FileProp())
		dok.Close(True)
		x = Dir
	Loop While x <> ""
End If
End Sub

Gruß
Stephan
LoHan
Beiträge: 2
Registriert: Mo, 08.05.2006 15:06
Wohnort: Surwold

Script von Stephan

Beitrag von LoHan »

Hallo Stephan,

herzlichen Dank für deine schnelle Hilfe. Als ich dein Script testen wollte, bekam ich die Fehlermeldung:

BASIC-Laufzeitfehler
Objektvariable nicht belegt


Folgende Codezeile war markiert:

Sub konvertieren()
Dim FileProp(0) As New com.sun.star.beans.PropertyValue
FileProp(0).Name="FilterName"
FileProp(0).Value="MS Excel 97"
auswahl = createunoservice("com.sun.star.ui.dialogs.FolderPicker")
auswahl.execute
pfad = auswahl.directory & "/"
x = Dir(pfad & "*.ods")
If x <> "" Then
Do

dok = StarDesktop.LoadComponentFromURL _
(ConvertToURL(pfad & x), "_blank", 0, args())
URL = dok.URL
URL = LEFT(URL, LEN(URL)-3) & "xls"
dok.storeAsUrl(URL,FileProp())
dok.Close(True)
x = Dir
Loop While x <> ""
End If
End Sub


Wenn ich als Pfad das Laufwerk D: (CD-ROM) angebe, kommt die Meldung sofort. Wenn ich ein Festplattenlaufwerk angebe öffnet sich zuerst ein leeres graues Fenster. Danach erscheint die Fehlermeldung und die ods-Datei ist geöffnet.

Muss ich noch was beachten?

Grüße
LoHan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Wenn ich als Pfad das Laufwerk D: (CD-ROM) angebe, kommt die Meldung sofort.


das geht auch in keinem Fall, die Dateien müssen in einem Verzeichnis ligen wo Du Schreibzugriff hast, eine CD ist nicht beschreibbar.
Muss ich noch was beachten?
im Moment weiß ich Nichts weiter, versuch mal das in eine Zeile zu schreiben, statt:

Code: Alles auswählen

dok = StarDesktop.LoadComponentFromURL _ 
(ConvertToURL(pfad & x), "_blank", 0, args())
das:

Code: Alles auswählen

dok = StarDesktop.LoadComponentFromURL(ConvertToURL(pfad & x), "_blank", 0, args())
und vermeide ggf. Leerzeichen am Ende der Codezeilen, falls da welche wären (hier im Forum kommen die irgendwie zwangsläufig rein, aber im Orginal sollten sie nicht dasein)


Gruß
Stephan
Antworten