Merci, j'ai réussi à trouver ce qu'il faut grâce aux mails du forum DEV, notamment sur : http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html
A+ François -----Message d'origine----- De : Florent Manens [mailto:[EMAIL PROTECTED] Envoyé : mardi 4 avril 2006 23:22 À : [email protected]; [EMAIL PROTECTED] Cc : [email protected] Objet : Re: [dev-fr] MS Access --> OO Writer Bonjour, On Tue, Apr 04, 2006 at 06:53:38PM +0200, François ETCHEGOIN wrote: > Je ne sais pas si la question a déjà été posée car je suis nouveau ici et si > je vais me faire comprendre... > Voilà : Je dois manipuler OOwriter via MSAccess / VBA donc pour cela je > réalise un accès via OLE à OO Writer. Ceci n'est pas une mince affaire mais > bon, j'obtiens quelques résultats... La version d'OO est la 2.0.2. > Le problème sur lequel je suis actuellement est de pouvoir enregistrer un > fichier odt en fichier Rtf, Pdf ou Html... > J'ai vu que sous OpenOffice Basic, il fallait passer par la fonction > StoreAsUrl de l'objet document avec pour propriété "Filtername" le format > par lequel enregistrer le document. Mais le problème sous VBA est que je > n'arrive pas à déclarer le tableau de propriété car le type > "com.sun.star.beans.PropertyValue" n'est pas reconnu... Pour utiliser le type com.sun.star.bean.PropertyValue, il faut utiliser la méthode Bridge_GetStruct (sur l'objet objServiceManager) qui permet d'utiliser les types de données OpenOffice. un Dim toto(1) as new com.sun.star.beans.PropertyValue devient un toto = [] toto.append(oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyVal ue")) toto.append(oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyVal ue")) en python (pour faire long) En VBA ça devrait donner (pas testé) : Dim toto(1) Set toto(0) = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue") Set toto(1) = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue") avec oServiceManager = CreateObject("com.sun.star.ServiceManager") Voici un exemple complet de conversion de fichier doc en pdf en Python (pour windows, pywin32 nécessaire) pour illustrer mon propos : Note : l'utilisation de la méthode "_FlagAsMethod(" est spécifique à Python avec OpenOffice en OLE. import sys import getopt import os import urllib __doc__ = """ Convert text file (.doc, .sxw, ...) to PDF with OpenOffice Usage: doc2pdf.py filename.doc """ def getOOoContext(): import win32com.client objServiceManager = win32com.client.dynamic.Dispatch("com.sun.star.ServiceManager") objServiceManager._FlagAsMethod("CreateInstance") objServiceManager._FlagAsMethod("Bridge_GetStruct") corereflection = objServiceManager.CreateInstance("com.sun.star.reflection.CoreReflection") return objServiceManager.createInstance("com.sun.star.frame.Desktop"), objServiceManager, corereflection def MakePropertyValue(oServiceManager, Name, Value): oStruct = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue") oStruct.Name = Name oStruct.Value = Value return oStruct def MakePropertyValues(oServiceManager, values): return [MakePropertyValue(oServiceManager, value[0], value[1]) for value in values] def convert_to_pdf(filename, pdffilename): StarDesktop, objServiceManager, corereflection = getOOoContext() document = StarDesktop.LoadComponentFromURL(filename, "_blank", 0, MakePropertyValues(objServiceManager, [["ReadOnly", True], ["Hidden", True]])) document.storeToUrl( pdffilename, MakePropertyValues(objServiceManager, [["CompressMode", 1], ["FilterName", "writer_pdf_Export"]])) document.close(False) def main(args): if not args or ("-h" in args): print __doc__ return try: opts, fileArgs = getopt.getopt(args, "") except getopt.GetoptError: print __doc__ return for filename in fileArgs: if os.path.exists(filename): pdffilename = ''.join([os.path.splitext(filename)[0], ".pdf"]) convert_to_pdf(''.join(["file:",urllib.pathname2url(filename)]), ''.join(["file:",urllib.pathname2url(pdffilename)])) if __name__ == "__main__": main(sys.argv[1:]) > Sur d'autres tests sur d'autres objets, j'ai pu contourner le pb en > utilisant la méthode setPropertyValues connue de l'objet ; pour d'autres, je > mets directement en méthode de l'objet le nom de propriété et ça passe, mais > là, je bloque... Suite sur [email protected] -- Florent Manens http://www.starxpert.fr [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
