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]

Répondre à