Bonjour,
si ça peut aider voici un script qui effectue du publipostage sans
passer par les sources de données d'OOo.
Il y a une centaine de lignes; j'espère ne pas ennuyer les modemistes ;-)
mes deux cents.
Ph.
---------------------------------------------------------------------
REM ***** BASIC *****
Option explicit
' On insère les champs dans le document via:
' Insérer->Champs->Autres...
' Onglet "Variables"
' puis "Champs utilisateurs"
dim Const SEP = ";" ' le séparateur de champs dans le fichier de données
dim Const prefixNom = "com.sun.star.text.FieldMaster.User."
Sub TestMailing
'Test de la macro de mailing
dim URLModele as string, URLdonnees as string, URLRepertoire as String
dim resultat as integer
URLModele=
converttoURL("/home/atp/LL/Migration/Macros/Invitation_maitre.odt")
URLDonnees =
converttoURL("/home/atp/LL/Migration/Macros/Donnees_invitation.csv")
URLRepertoire = converttoURL("/home/atp/tmp/OOo")
' URLRepertoire = "http://t22194"
' Pour utiliser une URL utilisant le protocole http
' il faut installer mod_put sur le serveur apache
' ou écrire un script CGI spécialisé.
' http://perso.ec-lyon.fr/lyonel.vincent/apache/mod_put.html
' http://www.apacheweek.com/features/put
' Appel de la macro
resultat = Mailing(URLModele, URLDonnees, "save", URLRepertoire)
end Sub
'
' Mailing sans utiliser une source de donnée pré-enregistrée
'
Function Mailing(URLmodele as string, URLdonnees as string, commande as
string, optional parametre as string)
dim monDocument as Object, lesFieldMasters as Object
dim leChamp as Object
dim PropPrint(0) As New com.sun.star.beans.PropertyValue
dim PropSave(0) As New com.sun.star.beans.PropertyValue
dim NoArgs() As Object
dim URLSauvegarde as String
dim lesChamps() as string
dim lesValeurs() as string
dim uneLigne as string
dim leMail as String, leDocument as String
dim leNom as string
dim nbChamps as integer
dim i as integer
dim f1 as integer
' Initialisations
On error goto ErrMailing
PropPrint(0).Name = "Wait"
PropPrint(0).Value = true
PropSave(0).Name = "Overwrite"
PropSave(0).Value = true
f1 = FreeFile
Open URLdonnees for input as #f1
monDocument = StarDesktop.loadComponentFromURL(URLmodele, "_blank", 0,
NoArgs())
lesFieldmasters = monDocument.getTextFieldMasters()
' La première ligne contient les noms des champs insérés dans le document
Line Input #f1, uneLigne
lesChamps = split(uneLigne, SEP)
nbChamps = Ubound(lesChamps)+1
' Les autres lignes contiennent les valeurs
Do While not Eof(f1)
Line Input #f1, uneLigne
lesValeurs = split(uneLigne, SEP)
for i = 0 to nbChamps-1
leNom = prefixNom & lesChamps(i)
if lesFieldmasters.hasByName(leNom) then
' print(leNom & "=" & lesValeurs(i))
leChamp = lesFieldmasters.getByName(leNom)
' ATTENTION: le champ inséré dans le document ne peut avoir que deux
formats:
' soit le format texte qui rend fausse la propriété
isExpression,
' soit un format de date qui rend vraie cette propriété.
' Tout autre format, notamment numérique, rendrait
également cette
' propiété vraie, ce qui invaliderait le traitement
ci-dessous.
' Je n'ai pas trouvé d'autre discriment pour repérer un
champ date.
if leChamp.isExpression then
leChamp.Value = DateValue(lesValeurs(i))
else
leChamp.Content = lesValeurs(i)
end if
end if
' Quelques valeurs à mémoriser
if lesChamps(i) = "MAIL" then leMail = lesValeurs(i)
if lesChamps(i) = "DOCNAME" then leDocument = lesValeurs(i)
next
' On raffraichit tous les champs
monDocument.getTextFields().refresh()
' Que faire du document généré?
Select Case commande
Case "print"
monDocument.print(PropPrint())
Case "save"
URLSauvegarde = parametre & "/" & leDocument & ".odt"
monDocument.storeAsURL(URLSauvegarde, propSave())
Case else
end Select
Loop ' prochaine ligne
Mailing = 0
FinMailing:
Exit Function
ErrMailing:
Mailing = Err
MsgBox ("Erreur " & Err & "." & Chr$(13) & Error$)
Resume FinMailing
End Function
--
Philippe Allart
Chargé de mission TIC
Tel: 03 20 21 24 88
Fax: 03 20 21 24 99
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]