

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
1 message in org.openoffice.fr.progbesoin d'aide pour automatisation pub...| From | Sent On | Attachments |
|---|---|---|
| Essonne Consultants | Jun 23, 2006 1:47 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | besoin d'aide pour automatisation publipostage | Actions... |
|---|---|---|
| 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







