Net zoals in MS Office is er in OpenOffice.org een macrotaal. Je kunt OpenOffice.org vanaf de commandoregel starten met de instructie om een macro uit te voeren. Je kunt zelfs bestandsnamen meegeven als parameter voor de macro. Met de --invisible optie kun je OpenOffice.org opstarten zonder de grafische gebruikersinterface. Op die manier kun je een commandoregel programma bouwen om bestanden te converteren van een MS Office-formaat naar een open formaat zoals ODF, PDF of HTML.
Met een Perl script of een script in een andere taal - zoals bijvoorbeeld Python in unoconv - kun je conversies automatiseren.
Selecteer in OpenOffice.org → → → .
Klik op de knop op de knop. Geef je module een naam, bijvoorbeeld AangepasteOmzettingen en druk op Enter.
De nieuwe module komt onder MyMacros/Standard te staan in de lijst van modules.
Selecteer je nieuwe module en klik op de knop.
In het editvenster vind je al een aanzet voor een script. Je mag dit verwijderen en vervangen door deze code - die je later naar wens kunt aanpassen:
' Gebaseerd op code van http://www.oooforum.org/forum/viewtopic.phtml?t=3772
' Bewaar het document als Acrobat PDF.
Sub SaveAsPDF( cFile )
cURL = ConvertToURL( cFile )
' Open het document in de blinde veronderstelling dat het van een
' type is dat OOo correct zal herkennen, zonder speciale filters.
oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
Array(MakePropertyValue( "Hidden", True ),))
cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf"
cURL = ConvertToURL( cFile )
' Bewaar het document gebruik makend van een filter.
oDoc.storeToURL( cURL, Array(_
MakePropertyValue( "FilterName", "writer_pdf_Export" ),)
oDoc.close( True )
End Sub
' Bewaar het document als MS Word.
Sub SaveAsDoc( cFile )
' Dit is grotendeels hetzelfde als 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
' Bewaar het document als OpenOffice 2 bestand.
Sub SaveAsOOO( cFile )
' Weer grotendeels gelijklopend aan SaveAsPDF.
cURL = ConvertToURL( cFile )
oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
Array(MakePropertyValue( "Hidden", True ),))
' Extenties van het output bestand gebaseerd op
' extentie van input bestand in kleine letters.
Select Case LCase(Right(cFile,3))
Case "ppt" ' PowerPoint
cFileExt = "odp"
Case "doc" ' Word
cFileExt = "odt"
Case "xls" ' Excel
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
Deze versie van Basic is een variant van het origineel, BASIC, die sommigen onder ons ooit leerden als eerste programmeertaal.
Kies → om je macro op te slaan.
Je zou nu je macro moeten kunnen gebruiken, ongeacht of je eerst OpenOffice.org herstart of niet:
ooffice -invisible macro:///Standard.AangepasteOmzettingen.SaveAsOOO(/var/tmp/test.doc)
Dit werkt op dezelfde manier op de commandoregel in MS Windows, maar je zult eventueel naar de OpenOffice.org binary moeten verwijzen met een volledig pad.
Je kunt nu een lijst maken van te converteren bestanden. Batch-omzettingen kunnen zeer eenvoudig zijn, bijvoorbeeld met een shell script of direct op de commandoregel in UNIX.
Denk erom dat je eventueel gecomprimeerde bestanden eerst moet uitpakken, bijvoorbeeld met een klein script:
ooffice -invisible "macro:///Standard.AangepasteOmzettingen.SaveAsOOO($1.doc)" unzip -o $1.odt content.xml cp content.xml $1.xml
Het interessante is dat je nu een cross-platform conversietool hebt, waarmee je niet alleen bestanden kunt omzetten van Office-gebruikers, maar nog veel belangrijker: je kunt er ook je oude bestanden mee ontsluiten en de weg vrijmaken voor het ontwikkelen van nieuwe toepassingen voor datamining.