Page 1 sur 1

[Windev] Dialogue OLE pour publipostage

MessagePublié: 23 Juin 2008 17:20
par eureka_05
Ayant trouvé une aide précieuse auprès des participants à ce forum, je met à disposition le résultat de mon travail.
Ci joint des méthodes à ajouter à la classe fournie avec Windev pour piloter OpenOffice :

1- Ouverture d'un document type et mise à disposition dans un fichier TXT des champs de fusion insérables
Code: Tout sélectionner   AgrandirRéduire
PROCEDURE OuvreDocType(psCheminComplet,DataTxt)
mNoArgs est un tableau de 1 objet Automation dynamique
res_Trait est un booléen
sCheminFormaté est une chaîne
NomSource,CheminODB est une chaîne
oInfo est un tableau de 1 objet Automation dynamique
iInfoBase est un tableau de 5 objet Automation dynamique
// Service manager nécessaire à OpenOffice
:DémarrerService()
mNoArgs[1] = :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
mNoArgs[1]>>Name = "Overwrite"
mNoArgs[1]>>Value = True
oInfo[1] = :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
SI fFichierExiste(psCheminComplet) ALORS
   
   // Formatage du chemin du fichier
   sCheminFormaté = TransFicOo(psCheminComplet)
   
   // Ouverture du fichier dans OpenOffice Writer
   :oDocument = :oDesktop>>LoadComponentFromURL(sCheminFormaté, "_blank", 0, oInfo)
   
   /// Création source de données
   SI :oDocument<>Null ALORS
      NomSource="MaBase"   
      :oDBContexte = :oServiceManager>>createInstance("com.sun.star.sdb.DatabaseContext")
      SI :oDBContexte>>hasByName(NomSource) ALORS
         :oDBContexte>>revokeObject(NomSource)
      FIN
      CheminODB=TransFicOo(fRepEnCours()+"\"+"MaBase.ODB")
      
      :uneInstance = :oDBContexte>>createInstance()
      :nomDocBase = :uneInstance>>DatabaseDocument
      :nomDocBase>>storeAsURL(CheminODB,mNoArgs)
      :nomDocBase>>info = mNoArgs
      :oDBContexte>>registerObject(NomSource,:uneInstance)
      :uneInstance>>URL="sdbc:flat:"+TransFicOo(fRepEnCours())
      iInfoBase[1]= :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
      iInfoBase[1]>>Name = "HeaderLine"
      iInfoBase[1]>>Value = True
      iInfoBase[2]= :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
      iInfoBase[2]>>Name = "FieldDelimiter"
      iInfoBase[2]>>Value = ";"
      iInfoBase[3]= :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
      iInfoBase[3]>>Name = "StringDelimiter"
      iInfoBase[3]>>Value = "''"  //un guillemet
      iInfoBase[4]= :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
      iInfoBase[4]>>Name = "DecimalDelimiter"
      iInfoBase[4]>>Value = ","
      iInfoBase[5]= :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
      iInfoBase[5]>>Name = "Extension"
      iInfoBase[5]>>Value = "txt"
      :uneInstance>>info = iInfoBase
      :nomDocBase>>store()
      RENVOYER Vrai
   FIN
FIN

RENVOYER Faux

2 - Lancement du publipostage
Code: Tout sélectionner   AgrandirRéduire
FONCTION Mailing(nomDoc,libdoc)
NomSource,DocumentModele,RepertoireCible,NomTable,NomChampTitreFichier est une chaîne
MyProps est un tableau de 0 Variant

// Service manager nécessaire à OpenOffice
:DémarrerService()
NomSource="MaBase"   
DocumentModele=TransFicOo(DocType)
RepertoireCible=TransFicOo(CHEMCOURRIER)
NomTable="ChampsDeFusion"
NomChampTitreFichier=" :bravo: "
:MonPublipostage= :oServiceManager>>createInstance("com.sun.star.text.MailMerge")
:MonPublipostage>>DataSourceName=NomSource
:MonPublipostage>>DocumentURL=DocumentModele
:MonPublipostage>>CommandType=0
:MonPublipostage>>Command=NomTable
:MonPublipostage>>OutputType=2
:MonPublipostage>>OutputUrl=RepertoireCible
:MonPublipostage>>FileNameFromColumn=False
:MonPublipostage>>FilenamePrefix=libdoc
:MonPublipostage>>SaveAsSingleFile=True //1 seul fichier
:MonPublipostage>>execute(MyProps)

Voilà, c'est testé et ça marche.
Merci encore à tout ceux qui m'ont permis d'arriver au bout avec leurs infos ou remarques en espérant que ce travail de recherche dépannera d'autres personnes dans mon cas