Page 1 sur 1

[Windev] Dialogue OLE pour publipostage

Publié : 23 juin 2008 15: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

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

Re: [Windev] Dialogue OLE pour publipostage

Publié : 07 mai 2015 14:22
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 ?