Jörg Schmidt wrote:
> Hallo Mathias,
> 
> Mathias Bauer schrieb:
>> OK, das entspricht meiner Erwartung. Falls Bedarf besteht,
>> hätte ich ein
>> Macro, das für alle Dokumente innerhalb eines beliebigen
>> Verzeichnisses
>> rekursiv alle Dokumente von "OpenDocument Dokument" zu "OpenDocument
>> Vorlage" patcht (sogar ohne das Dokument komplett zu laden,
>> daher rasend
>> schnell ;-)), also z.B. odt->ott, nicht aber sxw->stw.
> 
> Das konkrete Thema des Makros interessiert mich zwar weniger, aber ich
> vermute das geht so in Richtung das mit den OOo eigenen Mitteln das
> Archiv temporär entpackt wird und Du dann in die XML-Dateien direkt
> schreibst (?).

So ähnlich. Genauer gesagt müssen nur zwei Stellen im Package geändert
werden, das geht im API mit einem einzigen Befehl. Das zippen erledigt
OOo "im Hintergrund".

> Wie auch immer, ich würde gerne mal den Quelltext lesen. Kannst Du mir
> das bitte per PM schicken oder auf die Liste posten?

Das Macro ist klein genug für die Liste. Der Einfachheit halber wird das
Verzeichnis direkt in "Main" eingegeben. Es geht davon aus, dass die
Dateien schon die richtige Extension, aber den falschen "MediaType"
haben. Datein mit den Extensions ott,otp,ots,otg werden verarbeitet.

Der interessante Code ist der letzte Block.

Aber bitte beachten: wie immer ohne Gewähr und bitte immer zur
Sicherheit immer nur auf Kopien der Dateien ausführen.

> Sub Main
> 
>       startdir = "file:///c:/test.dir"
>       Scan( startdir )
>       
> End sub
> 
> 
> Sub Scan( name$ )
>
>       ' scans a directory and processes all files in it
>       ' sub directories are scanned also
>       dim acc as object
>       acc = createUnoService("com.sun.star.ucb.SimpleFileAccess")
>       names = acc.getFolderContents( name$, True )
>       
>       for i=0 to UBOUND(names)
>               if acc.isFolder( names(i) ) then scan( names(i) ) else 
> ChangeType( names(i) )
>       next i
> 
> end sub           
>       
> Sub ChangeType( URL as String )
> 
>       extension$ = right$( URL, 3 )
>       dim type$ as String
>       
>       if extension$ = "ott" then
>               type$ = "application/vnd.oasis.opendocument.text-template"      
>         
>       elseif extension$ = "otp" then
>               type$ = 
> "application/vnd.oasis.opendocument.presentation-template"              
>       elseif extension$ = "ots" then
>               type$ = 
> "application/vnd.oasis.opendocument.spreadsheet-template"               
>       elseif extension$ = "otg" then  
>               type$ = "application/vnd.oasis.opendocument.graphics-template"  
>         
>       endif
> 
>       if type$ <> "" then
>       
>               ' get factory to create storage objects
>               storagefactory = 
> createUnoService("com.sun.star.embed.StorageFactory")
>               dim args(1) as variant ' create arguments are passed as any 
> sequence
>               args(0) = URL ' file name
>               args(1) = 7 ' openmode (read/write)
>               ' Create a storage from the current URL (failure will abort the 
> program by exception)
>               storage = storageFactory.createInstanceWithArguments( args() )
>               ' Now set correct MediaType; this will update magic stream and 
> manifest.xml of the package
>               storage.setPropertyValue("MediaType", type$)
>               ' Hack: setting only property doesn't set storage to modified, 
> so commit() is ignored
>               ' inserting and immediately removing a new element does the job 
>               dim o as object
>               o = storage.openStreamElement("dummyXXXXX", 7)
>               o.dispose
>               storage.removeElement("dummyXXXXX")
>               ' Commit the storage to write all changes to the file
>               storage.commit()
>       
>       endif
>       
> end sub

Ciao,
Mathias

-- 
Mathias Bauer - OpenOffice.org Application Framework Project Lead
Please reply to the list only, [EMAIL PROTECTED] is a spam sink.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Antwort per Email an