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]

Répondre à