1 message in org.openoffice.fr.progbesoin d'aide pour automatisation pub...
FromSent OnAttachments
Essonne ConsultantsJun 23, 2006 1:47 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:besoin d'aide pour automatisation publipostageActions...
From:Essonne Consultants (esso@wanadoo.fr)
Date:Jun 23, 2006 1:47:38 am
List:org.openoffice.fr.prog

Bonjour,

Je souhaite, à partir d'une base access piloter OO comme je le fais actuellement avec Word pour réaliser un publipostage à partir d'un modèle de document

J'ai modifié une macro que j'ai trouvé sur internet et j'arrive à lancer ma fusion par la commande suivante :

Private Sub Open_Office_Click()

Dim stAppName As String

stAppName = "C:\Program Files\OpenOffice.org 2.0\program\swriter.exe macro:///standard.module1.macro_publipostage"

Call Shell(stAppName, 1)

End Sub

mais cela me génère autant de documents que d'enregistrement à fusionner (alors que je souhaiterais un document avec une page par enregistrement à fusionner).

Par contre je n'arrive pas à charger mon modèle, donc je charge un document existant qui est modifié lors de la fusion (remplacement des champs de fusion par les données d'un enregistrement) : voir la ligne en bleu que je souhaiterais modifier.

Merci de votre aide,

Philippe

Pour info ma macro :

Sub macro_publipostage

' Dimensionnement de la valeur de retour de la fonction PubliPostage,

' pour savoir si la fonction s'est bien passée

Dim RetourValeur as long

' Lancement de la procédure de publi-postage

RetourValeur = Publipostage("D:/Logement/Open Office/", "test", "trt")

If RetourValeur then

' Si problème, on informe l'utilisateur

MsgBox("Un problème a eu lieu lors de la fonction PubliPostage. Vérifiez votre impression s'il vous plait.")

endif

end sub

Function Publipostage(Chemin as string, ArgNomBase As String, ArgNomTable as String)

on error goto ErreurPubliPostage

Dim oDesktop As Object

Dim oDocument As Object

dim tUrl as String ' Contiendra le chemin complet du fichier modèle

Dim NoArgs() as New com.sun.star.beans.PropertyValue

Dim oDocClose

Dim dispatcher as Object

Dim parser as Object

Dim disp as Object

Dim url as new com.sun.star.util.URL

Dim oFrame as Object

' Vérification si Chemin possède un "/" à la fin, si non, on en met un. On enlève les espaces devant/derriere.

Chemin=trim(Chemin)

If Right(Chemin,1) <>"/" then

Chemin=Chemin+"/"

endif

' Connexion au service, nécessaire pour le fonctionnement de toutes les propriétés et méthodes

oDesktop = createUnoService("com.sun.star.frame.Desktop")

dim oRowSet as object ' Equivalent d'un Dynaset, autrement dit

' une "image" dynamique de la table.

dim ChaineSQL as String ' Chaine qui contiendra la requête SQL de chargement du RowSet

' Connexion au service de gestion des base de données

oRowSet = createUnoService("com.sun.star.sdbc.RowSet")

' Définition de la base de données à atteindre

oRowSet.SetPropertyValue("DataSourceName",ArgNomBase)

' Chargement de la chaîne contenant la requête SQL

ChaineSQL = "select * from " + ArgNomTable

' Affectation de la requête SQL

oRowSet.SetPropertyValue("Command",ChaineSQL)

' Exécution de la requête SQL

oRowSet.execute

'Récupération du nom des colonnes

dim mData as object ' Contiendra les données du RowSet

dim n as integer

dim NbColonnes as integer ' Le nombre de colonnes du RowSet

mData = oRowSet.getMetaData()

NbColonnes= mData.ColumnCount

dim NomColonnes(NbColonnes) As String ' Dimensionnement du tableau des noms de colonnes

if oRowSet.RowCount > 0 then ' S'il existe des lignes dans la table...

oRowSet.next()

for n=0 to NbColonnes - 1

NomColonnes(n) = mData.getColumnName(n+1) ' On charge le nom des colonnes (1ere ligne)

next n

endif

'Remplissage des champs

Dim oChamps, tfm, InpFieldEnum, InpField As Object

dim NomColonneChamps as String

do while not oRowset.isAfterLast ' Teste si Fin de fichier (EOF)

' Ouverture du document de la ligne d'enregistrement

for n=0 to NbColonnes-1

if NomColonnes(n)="TYPCOUR" then ' Nom de la colonne contenant le nom du fichier modèle

tUrl="file:///" + Chemin + oRowSet.getString(n+1) +".odt"

endif

next n

' Chargement du document

oDocument = oDesktop.LoadComponentFromURL(tUrl,"_blank",0,NoArgs()) ' Chargement d'un document existant, je prférerais création d'un document à partir d'un modèle ou création d'un nouveau document par copie du document existant

' Important : on charge dans oChamps tous les champs du modèle,

' Comprendre les champs qui peuvent être modifiés dans le document modèle.

oChamps = oDocument.getTextFields

' Création d'une énumération des champs texte du modèle

InpFieldEnum = oChamps.createEnumeration()

do while InpFieldEnum.hasMoreElements '

InpField = InpFieldEnum.nextElement()

if InpField.supportsService("com.sun.star.text.TextField.Database") then

tfm = InpField.getTextFieldMaster()

' Chargement du nom du champ texte dans le modèle, pour vérification ensuite avec le nom des colonnes

' dans la base de données

NomColonneChamps = InpField.getTextFieldMaster.getPropertyValue("DataColumnName")

for n=0 to NbColonnes-1 ' De la première à la dernière colonne de la base données...

if NomColonneChamps = NomColonnes(n) then ' Le nom de la colonne est-il le nom du champ texte ?

InpField.Content = oRowSet.getString(n+1) ' Si oui, la valeur du champ est chargée depuis la BDD

exit for ' et on sort de la boucle

endif

next n

endif

loop

oChamps.Refresh ' Rafraichir tous les champs du document modèle

oRowset.next ' On passe à la ligne suivante

loop ' Retour case départ

PubliPostage=0

Goto FinPubliPostage

ErreurPubliPostage:

PubliPostage = ERR

MsgBox ("Erreur" & ERR & "." & chr$(13) & ERROR$)

FinPubliPostage:

End Function

Merci encore de votre aide,

Philippe