OpenOffice von der Komandozeile aus aufrufen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Senifor
Beiträge: 5
Registriert: Mo, 06.02.2006 11:46

OpenOffice von der Komandozeile aus aufrufen

Beitrag von Senifor »

Hallo zusammen,

ich habe keine Ahnung von OpenOffice, deshalb wende ich mich an Euch.

Ich suche eine Möglichkeit mittels OpenOffice MSOffice-Dokumente in PDFs zu verwandeln, und zwar von der Kommandozeile aus.

Dazu habe ich folgendes Skript in einem Modul gespeichert:

Code: Alles auswählen

' Save document as an Acrobat PDF file.
Sub SaveAsPDF( cFile )
 	
   cURL = ConvertToURL( cFile )
   ' Open the document. Just blindly assume that the document 
   ' is of a type that OOo will correctly recognize and open 
   ' without specifying an import filter.
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
            Array(MakePropertyValue( "Hidden", True ),))

   cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf"
   cURL = ConvertToURL( cFile )
   
   ' Save the document using a filter.   
   oDoc.storeToURL( cURL, Array(_
            MakePropertyValue( "FilterName", "writer_pdf_Export" ),)
   
   oDoc.close( True )
End Sub

' Save document as a Microsoft Word file. 
Sub SaveAsDoc( cFile ) 
   ' mostly a copy of SaveAsPDF
   cURL = ConvertToURL( cFile )
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, (_
            Array(MakePropertyValue( "Hidden", True ),))


   cFile = Left( cFile, Len( cFile ) - 4 ) + ".doc"
   cURL = ConvertToURL( cFile )
   
   oDoc.storeToURL( cURL, Array(_
            MakePropertyValue( "FilterName", "MS WinWord 6.0" ),)
   oDoc.close( True )

End Sub


' Save document as an OpenOffice 2 file. 
Sub SaveAsOOO( cFile ) 
   ' mostly a copy of SaveAsPDF. Save as an OpenOffice file. 
   cURL = ConvertToURL( cFile )
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
            Array(MakePropertyValue( "Hidden", True ),))

   ' Set output file extension based on lower-case 
   ' version of input extension.
   Select Case LCase(Right(cFile,3))
     Case "ppt"         ' PowerPoint file.
       cFileExt = "odp"
     Case "doc"         ' Word file.
       cFileExt = "odt"
     Case "xls"         ' Excel file.
       cFileExt = "ods"
     Case Else
       cFileExt = "xxx"
    End Select
       
   cFile = Left( cFile, Len( cFile ) - 3 ) + cFileExt
   cURL = ConvertToURL( cFile )
   
   oDoc.storeAsURL( cURL, Array() )
   oDoc.close( True )

End Sub


Function MakePropertyValue( Optional cName As String, Optional uValue ) _
   As com.sun.star.beans.PropertyValue
   Dim oPropertyValue As New com.sun.star.beans.PropertyValue
   If Not IsMissing( cName ) Then
      oPropertyValue.Name = cName
   EndIf
   If Not IsMissing( uValue ) Then
      oPropertyValue.Value = uValue
   EndIf
   MakePropertyValue() = oPropertyValue
End Function
Mittels

Code: Alles auswählen

"C:\Program Files\OpenOffice.org 2.0\program\soffice" 
  -invisible macro:///Standard.MyConversions.SaveAsOOO(c:\temp\sample.doc)
rufe ich dann OpenOffice auf.

Leider bekomme ich eine Fehlermeldung und weiss nicht worans liegt. Und zwar gibt er mir an der Stelle cURL = ConvertToURL( cFile ) einen Laufzeitfehler aus, dass das Argument nicht optional ist.

Kann mir jemand helfen ?

Danke und Gruss, Senifor
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Senifor,

also, wenn du das so aufrufst:

Code: Alles auswählen

"C:\Program Files\OpenOffice.org 2.0\program\soffice"
  -invisible macro:///Standard.MyConversions.SaveAsOOO(c:\temp\sample.doc)
Dann darfst du dich über einen Fehler nicht wundern. Dein Makro erwartet einen String-Parameter (bzw. eigentlich nur überhaupt einen Parameter), du übergibst aber keinen (mit c:\temp\sample.doc ) kann OOo nichts anfangen. Was soll das sein? Für OOO ist das ein Variablenname - und den gibt es nicht.

Versuch das mal in Doppelte Hochzeichen zu setzen - jetzt wäre es ein String - nur fürchte ich, jetzt versagt die Console ???

Um das zu testen mach mal folgendes:

Code: Alles auswählen

Sub SaveAsOOO( optional cFile as string ) 
       msgbox cFile
       exit sub
Dann siehst du, ob oder was übergeben wurde.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Senifor
Beiträge: 5
Registriert: Mo, 06.02.2006 11:46

Beitrag von Senifor »

Hallo Toxitom,

vielen Dank für Deine Antwort. Mit Anführungszeichen geht das ganze *freu*. Da ich keinen Plan von OPenOffice hab, muss nochmal nachfragen. Ich möchte bei dem Makro in der Routine SaveAsPDF, dass nur die erste Seite als PDF gespeichert wird. Geht das irgendwie ?

Thanx und Grüsse, Senifor
Senifor
Beiträge: 5
Registriert: Mo, 06.02.2006 11:46

Beitrag von Senifor »

Hallo Toxitom,
es geht doch nicht. Weiss auch nicht was ich gestern gemacht hab, dass es funktionierte. Es kommt jedenfalls als Ausgabe in der MessageBox "Error |"
Hat noch jemand eine Idee ?
Thanx und Grüsse, Senifor
ztree
Beiträge: 5
Registriert: Do, 29.12.2005 19:17

Beitrag von ztree »

Hallo Senifor,

Bei mir klappt der Kommandozeilen-Aufruf so:

"C:\Programme\OpenOffice.org 2.0\program\soffice" -invisible "macro:///ZwStV.Module1.Main(%1,%2,%3,%4,%5,%6,%LocalRoot%)"

Im Code kann ich die Parameter dann verarbeiten
Sub Main(para1 As String, para2 As String, para3 As String, para4 As String, para5 As String, para6 As String, para7 As String)

Gruß
Oli
Antworten