IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

[Macro MailMerge] : Comment ouvrir automatiquement le fichier de sortie ? [LibreOffice]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Macro MailMerge] : Comment ouvrir automatiquement le fichier de sortie ?
    Bonjour,

    Je suis en train de faire une macro de fusion entre une trame WRITER et une Base de données CALC, comprenant uniquement deux lignes (la ligne des champs, et la ligne des données).

    Il n'y a donc en principe qu'un seul fichier de sortie, et j'aimerais qu'il s'ouvre automatiquement à la fin de la macro, pour pouvoir éventuellement y apporter des modifications.

    Je cherche donc à générer automatiquement l'url de ce fichier de sortie, pour l'ouvrir, via StarDesktop.loadComponentFromURL (cf la dernière ligne du code ci-dessous), mais je ne parviens pas à trouver la bonne syntaxe.

    Merci d'avance pour votre aide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub Fusion
     
    dim NomSource as String 
    dim NomTable as String
    dim colonnePrefixe as string
    dim URLmodele as string
    dim repResultats as string
    dim Fusion as object, props()
    dim FichierSortie as object
    dim propFich()
     
    NomSource = "Base"
    NomTable = "Feuille1"
    colonnePrefixe = "NumDossier"
    URLmodele = ConvertToURL("C:\Desktop\Fusion\Trame.odt")
    RepResultats = ConvertToURL("C:\Desktop\Fusion\Resultats\")
     
    Fusion = createUnoService("com.sun.star.text.MailMerge")
     
    With Fusion
      .DataSourceName = nomSource 
      .CommandType = com.sun.star.sdb.CommandType.TABLE
      .Command = nomTable 
      .OutputType = com.sun.star.text.MailMergeType.FILE
      .FileNameFromColumn = True
      .FilenamePrefix = colonnePrefixe
      .SaveAsSingleFile = True
      .DocumentURL = URLmodele 
      .OutputURL = repResultats 
      .execute(props())
    End With
     
    MsgBox("Le document est stocké dans le dossier :"+RepResultats)
     
    FichierSortie = StarDesktop.loadComponentFromURL(?????????????, "_blank", 0, propFich())
     
    End Sub

  2. #2
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Ta macro est intéressante. Dans le doute, ne sachant pas si tu maîtrise l'interface loadComponentFromURL, je te réponds en détail.


    Dans : https://www.openoffice.org/api/docs/...MailMerge.html
    Pour le service Mailmerge, tu utilises la propriété :
    OutputURL
    string OutputURL;

    Description
    contains the path where generated files are created.

    If "OutputURL" or "FileNamePrefix" are empty the missing value is generated from the location or title of the source documents.
    This property is only evaluated for file output.

    La propriété que tu as déclarée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RepResultats = ConvertToURL("C:\Desktop\Fusion\Resultats\")
    Pour l'interface loadComponentFromURL, à la place des ??????, ce paramètre documente le chemin d'accès au fichier + le nom du fichier.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Fichier_resultat as object
    Dim Loc_Fichier_resultat as string
     
    Dim NoArgs()
    Desktop = createUnoService("com.sun.star.frame.Desktop")
    Loc_Fichier_resultat = "file:///home/pascaltech/Modules_ix/Fichier_resultat.odt"
    Fichier_resultat = Desktop.loadComponentFromURL(Loc_Fichier_resultat,"_blank",0,NoArgs())
    Il te suffit d'ajouter le nom du fichier au répertoire RepResultats, pour obtenir le paramètre de l'interface loadComponentFromURL
    C'est du texte (string) dans les deux cas, alors par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loc_FichierSortie = RepResultats + nom_de_fichier
    La propriété :
    FileNameFromColumn
    boolean FileNameFromColumn;

    Description
    determines whether file names of created files are generated using the content of a database column.

    This property is only evaluated for file output.
    étant sur True, le nom de fichier est contenu dans ton fichier Calc.


    FileNamePrefix
    string FileNamePrefix;

    Description
    contains the name of the column to generate the output file names.

    If FileNameFromColumn is true the content of the related column is added to the OutputURL.

    If "OutputURL" or "FileNamePrefix" are empty the missing value is generated from the location or title of the source documents.

    This property is only evaluated for file output.
    Je suis en train de faire une macro de fusion entre une trame WRITER et une Base de données CALC, comprenant uniquement deux lignes (la ligne des champs, et la ligne des données).
    Est-ce que la ligne de champs vient du fichier WRITER et la ligne de données du fichier Calc ou les deux du fichier Calc ?

    Le service MAilmerge te permet de récupérer le nom de fichier dans le fichier Calc, à ce que je comprends, c'est tout.

    Par ce service, il n'y a pas d'association ligne à ligne, je pense.


    Tu as une erreur sur la propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OutputType = com.sun.star.text.MailMergeType.FILE
    Dans https://www.openoffice.org/api/docs/...MergeType.html
    constants group MailMergeType

    Description
    Defines the possible output types/devices for mail merge.
    Since
    OOo 1.1.2

    Constants
    PRINTER The output device is a printer.
    FILE The output device is a file.
    MAIL The output is sent as e-Mail.
    Constants' Details
    PRINTER
    const short PRINTER = 1;

    Description
    The output device is a printer.

    FILE
    const short FILE = 2;

    Description
    The output device is a file.

    MAIL
    const short MAIL = 3;

    Description
    The output is sent as e-Mail.
    Tu dois écrire :
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour Pascaltech,

    Merci pour ta réponse très détaillée !


    Citation Envoyé par Pascaltech Voir le message

    Pour l'interface loadComponentFromURL, à la place des ??????, ce paramètre documente le chemin d'accès au fichier + le nom du fichier.


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Fichier_resultat as object
    Dim Loc_Fichier_resultat as string
     
    Dim NoArgs()
    Desktop = createUnoService("com.sun.star.frame.Desktop")
    Loc_Fichier_resultat = "file:///home/pascaltech/Modules_ix/Fichier_resultat.odt"
    Fichier_resultat = Desktop.loadComponentFromURL(Loc_Fichier_resultat,"_blank",0,NoArgs())
    Il te suffit d'ajouter le nom du fichier au répertoire RepResultats, pour obtenir le paramètre de l'interface loadComponentFromURL
    C'est du texte (string) dans les deux cas, alors par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loc_FichierSortie = RepResultats + nom_de_fichier
    La propriété :


    étant sur True, le nom de fichier est contenu dans ton fichier Calc.

    Est-ce que la ligne de champs vient du fichier WRITER et la ligne de données du fichier Calc ou les deux du fichier Calc ?
    La ligne des champs vient du fichier Calc, qui ne comprends que 2 lignes : 1) les champs, 2) les données
    Le fichier Calc est connecté au fichier Writer, en tant que source de données.

    Ce que je cherchais à faire, c'est justement récupérer dynamiquement le nom du fichier généré par Mailmerge, sans avoir à ouvrir le fichier Calc, mais simplement en récupérant la donnée "FilenamePrefix".

    Je continue à chercher !

    Merci encore !

  4. #4
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Je ne pense pas que ce soit faisable dynamiquement uniquement avec le service Mailmerge.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub AhLancerPublipostage
     
        Dim ahNomSource as string
        Dim ahDocumentModele as string, ahRepertoireCible as string
        Dim ahNomTable as string
        Dim ahNomChampTitreFichier as string
        Dim ahNomPublipostage as Object, MyProps()
     
     
        ahNomSource = "CCPM"
        ahDocumentModele = "D:\2011\CCPMPIPEPS\Fiche individuelle CCPM.odt"
        ahRepertoireCible = "D:\2011\CCPMPIPEPS\FicheImprimer"
        ahNomTable = "CCPM"
        ahNomChampTitreFichier = "F1"
     
        ahMonPublipostage = createUnoService("com.sun.star.text.MailMerge")
     
        MsgBox "Lancement du Publipostage !"
     
          'Affichage de la boite avec barre de progression.
       DialogLibraries.LoadLibrary( "Standard" )
       boiteAttente = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
       boiteAttente.setVisible(True) ' affiche la fenêtre de la barre de progression
     
           'Ici le code comme par exemple des calculs ou autre qui prend un certain temps
       'La boucle ci-dessous simule un code "qui travaille"
       For compte = 1 to 100
       Wait 2000 'temporisation pour simuler le code
     
       'Fait avancer la barre de progression
        boiteAttente.getControl("ProgressBar1").value= compte
        Next compte
     
        With ahmonPublipostage
           .DataSourceName = ahNomSource
           .CommandType = com.sun.star.sdb.CommandType.TABLE
           .Command = ahNomTable
           .OutputType = com.sun.star.text.MailMergeType.FILE
           .FileNameFromColumn = False
           .SaveAsSinglefile = True
           .FilenamePrefix = "FicheCCPM"
           .DocumentURL = ConvertToURL(ahDocumentModele)
           .OutputURL = ConvertToURL(ahRepertoireCible)
           .execute(MyProps())
        End with
     
        boiteAttente.dispose 'ferme la fenêtre de la barre de progression
     
        MsgBox "Fin du Publipostage !"
     
        Dim ahAdresseDoc As String
        Dim ahPropFich(0) as New com.sun.star.beans.PropertyValue
        Dim ahMonDocument as object
     
        ahAdresseDoc=convertToURL("D:\2011\CCPMPIPEPS\FicheImprimer\FicheCCPM0.odt")
     
        ahMonDocument=starDesktop.LoadComponentFromURL(ahAdresseDoc, "_default", 0, ahPropFich())
     
        End Sub
    qui démontre qu'il faut ouvrir le fichier à postériori de la fonction Mailmerge. Tu auras peut-être plus d'exemples en recherchant le terme "publipostage".

    Je corrige ce que je t'ai dis en dernier, apparemment il est possible d'utiliser la propriété .OutputType comme tu l'utilises. Il doit y avoir les deux possibilités, je présume.
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer l'extention d'un fichier.
    Par L4BiN dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 21/06/2006, 13h44
  2. Réponses: 2
    Dernier message: 04/05/2006, 19h54
  3. Comment récupérer le contenu de plusieurs fichiers textes ?
    Par calimero2611 dans le forum Langage
    Réponses: 9
    Dernier message: 19/02/2006, 15h45
  4. [Delphi 2005 ] Comment récupérer la taile d'un fichier ?
    Par babyface dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/11/2005, 20h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo