[Résolu][Writer]Erreur lors du publipostage

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

[Résolu][Writer]Erreur lors du publipostage

Message par agraeth »

Bonjour,

Je souhaite créer un outil pour "faciliter" le publipostage (FD.ods) :
- renseignements saisis directement dans le fichier
- fichier Calc (source des données - fichTest.ods) sélectionné via une boite de dialogue
- si besoin (plus d'une feuille dans le classeur), sélection de la feuille contenant les données via une boite de dialogue
- fichier Writer (modèle pour le publipostage - fichTest.odt) sélectionné via une boite de dialogue
- création (la première fois) ou mise à jour de la base de données (fdBase.odb) (merci à Dude : https://forum.openoffice.org/fr/forum/v ... =15&t=6872)
- mise à jour des champs de fusion (merci à JacquesF : https://forum.openoffice.org/fr/forum/v ... on#p197017)
- publipostage (merci à Bernard Marcelly et Laurent Godard pour leur très utile livre Programmation OpenOffice.org 3 Macros OOoBASIC et API)

Mon problème intervient lors du publipostage dont voici le code :

Code : Tout sélectionner

Sub Publipostage(publiDoc As String, oTable As String, nomCol As String, oType As Long)
' Avec publiDoc = URL du fichier Writer, oTable = nom de la feuille contenant les données, nomCol = nom de la colonne choisie pour le préfixe, oType = 0 si fichiers multiples - 1 si fichier unique
Dim props()
With createUnoService("com.sun.star.text.MailMerge")
	.DataSourceName = nomSource
	.CommandType = com.sun.star.sdb.CommandType.TABLE
	.Command = oTable
	.outputType = com.sun.star.text.MailMergeType.FILE
	.saveAsSingleFile = oType
	.fileNameFromColumn = True
	.fileNamePrefix = nomCol
	.documentURL = publiDoc
	If Dir(convertToURL(getRep(ThisComponent) & nomListe & "\")) = "" Then mkDir convertToURL(getRep(ThisComponent) & nomListe & "\")
	.outputURL = convertToURL(getRep(ThisComponent) & nomListe & "\")
	.execute(props())
End With
End Sub
Le problème intervient à la ligne .execute(props()) et affiche l'erreur suivante :
errorMsg.PNG
Ci-dessous l'ensemble des fichiers (FD.ods, fichTest.ods, fichTest.odt) à l'exception du fichier base qui est créé automatiquement :
FD.7z
Merci à vous pour votre collaboration !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par agraeth le 04 juil. 2017 11:28, modifié 1 fois.
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Writer]Erreur lors du publipostage

Message par luky-luke »

Bonjour
Je pense qu'il te manque la création d'un objet

Code : Tout sélectionner

Dim Publipostage as Object
Publipostage = createUnoService("com.sun.star.text.MailMerge")
With Publipostage
[...]
End With
Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

Re: [Writer]Erreur lors du publipostage

Message par agraeth »

Bonjour,

Merci luky-luke pour ton aide.
La définition de l'objet règle l'erreur initiale.

Par contre, j'ai l'impression que les champs ne sont pas remplacés par leur valeur lors du publipostage...

Je joins un nouveau dossier .7z comprenant les modifications apportées (création de l'objet oPubli recevant createUnoService("com.sun.star.text.MailMerge"), création du dossier de sauvegarde)
FD.7z
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25182
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer]Erreur lors du publipostage

Message par Dude »

Salut,

Fais nous gagner du temps en simplifiant le problème.
Utilise la bibliographie et fais en sorte que ta macro envoie les fichiers dans un répertoire banalisé du type c:\temp.
Teste tout ça et si cela dysfonctionne, joins ce document.
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Writer]Erreur lors du publipostage

Message par luky-luke »

Bonjour
agraeth a écrit :j'ai l'impression que les champs ne sont pas remplacés par leur valeur lors du publipostage...
Il faut que dans ton modèle pour le publipostage (fichTest.odt) les champs soient insérés depuis la base de données fdBase.
Champs_Publipostage.png
Je me suis permis quelques corrections dans les macros SetODBlink et Publipostage
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

Re: [Writer]Erreur lors du publipostage

Message par agraeth »

Bonjour,

Dude, je ne suis pas certain de comprendre ce que tu me demandes...
Le dossier de sauvegarde est créé automatiquement dans le répertoire contenant le fichier FD.ods

luky-luke, je pensais que c'était le rôle de la macro UpdateSourceFusion de mettre à jour les champs de fusion...

Code : Tout sélectionner

Sub UpdateSourceFusion(modDoc As Object, sBase As String, sQuery As String)
'Modifie les références des champs de fusion d'un fichier
Dim oTextMaster As Object
'Parcours de tous les champs de fusion
oTextFields = modDoc.getTextFields()
oTextFieldEnum = oTextFields.createEnumeration()
Do While oTextFieldEnum.hasMoreElements()
	oTextField = oTextFieldEnum.nextElement()
	oTextMaster = oTextField.getTextFieldMaster()
	If oTextMaster.supportsService("com.sun.star.text.fieldmaster.Database") Then
		'Mise à jour des codes du champ avec la base et la requête utilisée
		oTextMaster.DatabaseName = sBase
		oTextMaster.DataTableName = sQuery
	End If
Loop
End Sub
Avec modDoc = fichTest.odt, sBase = "fdBase", sQuery = nom de table (feuille de fichTest.ods contenant les données)
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Writer]Erreur lors du publipostage

Message par luky-luke »

Bonjour
agraeth a écrit :je pensais que c'était le rôle de la macro UpdateSourceFusion de mettre à jour les champs de fusion...
Oui, mais si le document est modifié, il est nécessaire de l'enregistrer :wink:

Code : Tout sélectionner

Sub UpdateSourceFusion(modDoc As Object, sBase As String, sQuery As String)
'Modifie les références des champs de fusion d'un fichier
[...]
Loop
modDoc.TextFields.Refresh
modDoc.store
End Sub
Et le rafraîchissement du fichier dans le sub updateFichier n'est plus nécessaire.
Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

Re: [Writer]Erreur lors du publipostage

Message par agraeth »

Merci luky-luke !

C'est résolu !
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro