[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.
eureka_05
Membre lOOyal
Membre lOOyal
Messages : 38
Inscription : 05 juin 2008 18:09

[Windev] Dialogue OLE pour publipostage

Message 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

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

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
Avatar de l’utilisateur
Hatila
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mai 2015 16:19

Re: [Windev] Dialogue OLE pour publipostage

Message par Hatila »

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
Répondre