[Windev] Dialogue OLE pour publipostage

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Windev] Dialogue OLE pour publipostage

Messagepar eureka_05 » 23 Juin 2008 16:20

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
openoffice 2.4 windows vista
eureka_05
Membre lOOyal
Membre lOOyal
 
Message(s) : 38
Inscrit le : 05 Juin 2008 17:09

Re: [Windev] Dialogue OLE pour publipostage

Messagepar Hatila » 07 Mai 2015 15:22

Tu dois surement être loin vu la date du post mais au cas où je vais poser ma question,
Est-ce que tu pourrai publier ton code de déclaration de ta classe et les fonctions que tu utilises dans ton code ?
Apache OpenOffice 4.1.1 sous Windows 7
Avatar de l’utilisateur
Hatila
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 07 Mai 2015 15:19


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)