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.PropertyValue"))
toto.append(oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"))
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]