none
Mailing Label et AutoTextEntry RRS feed

  • Question

  • Bonjour,

    J'essaye de traduire une application que j'ai faite en VB6 qui me permet de faire un label entre un fichier excel et word via l'automation.

    Je bloque malheureusement sur la partie ou je suis supposé mergé les champs dans mes étiquettes.

    En VB6 je fais

    Dim oAutoText as Word.AutoTextEntry
    
    Set oAutoText = Word.NormalTemplate.AutoTextEntries.Ad("MyLabelLayout", document.Content)


    en C# je trouve bien un AutoTextEntry mais ce n'est qu'une interface et je n'arrive à l'utiliser en C#.

    Toute la partie mise en page et création des labels fonctionne parfaitement, c'est vraiment la partie merge des données qui ne fonctionne pas vu que j'arrive pas à implémenter en C# le bout de code définit plus haut en VB6 qui me permet d'insérer les données via un AutoText Entry.

    Merci d'avance pour toute l'aide que vous pourriez m'apporter.


    • Modifié Aurel Bera vendredi 8 novembre 2013 08:11 modif message
    jeudi 7 novembre 2013 15:10

Réponses

  • Tel qu'il est là, le code tourne parfaitement.

    Mais ne crée que le layout sans que les champs ne soient remplis.

    Vu que je ne trouvais pas de solution, j'ai décidé de laisser tomber l'automation de Word qui semble ne plus voir fonctionner comme avant pour utiliser Drawing.Printing pour générer mes étiquettes et les impression et DrawString pour remplir les étiquettes.

    En tout les cas, merci pour l'aide.

    • Marqué comme réponse Aurel Bera lundi 11 novembre 2013 14:41
    lundi 11 novembre 2013 14:37

Toutes les réponses

  • Bonjour

    Dans ce thread vous avez quelques exemples d'utilisation :

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/da3f6dd1-e7d5-45ec-bf9b-3602d84ed849/c-footers-and-autotextentries

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 8 novembre 2013 08:10
  • J'avais déjà vu ce thread.

    Comme stipuler dans la réponse, Word.NormalTemplate.AutoTextEntries ne s'affiche pas dans l'AutoTextEntries.

    Mon application crée.

    1. Les différents champs dans le fichier word.

    2. Devrait créer l'autotextentry pour faire le lien entre mes champs et mon fichier excel.

    3. Ouvre le fichier source (Excel)

    4. Crée le document MailingLabel et l'exécute.

    Le résultat pour l'instant me donne seulement un fichier Word de type Label avec toutes mes étiquettes crées, correctement formatée mais non remplie malheureusement.

                var document = new Microsoft.Office.Interop.Word.Document();
    
                var oFields = document.MailMerge.Fields;
    
                oFields.Application.Selection.Font.Name = "Times New Roman";
                oFields.Application.Selection.Font.Size = 8;
                oFields.Application.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                oFields.Add(m_Application.Selection.Range, "Description");
                m_Application.Selection.TypeParagraph();
    
                oFields.Application.Selection.Font.Name = "Code 128";
                oFields.Application.Selection.Font.Size = 22;
                oFields.Application.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                oFields.Add(m_Application.Selection.Range, "Code_Barre");
                m_Application.Selection.TypeParagraph();
    
                oFields.Application.Selection.Font.Name = "Times New Roman";
                oFields.Application.Selection.Font.Size = 8;
                oFields.Application.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                oFields.Add(m_Application.Selection.Range, "Nr_Fournisseur");
                m_Application.Selection.TypeText(" / ");
                oFields.Add(m_Application.Selection.Range, "Ref_Amps");
                m_Application.Selection.TypeParagraph();
    
                oFields.Application.Selection.Font.Name = "Times New Roman";
                oFields.Application.Selection.Font.Size = 12;
                //oFields.Application.Selection.Font.Bold  = true;
                oFields.Application.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                oFields.Add(m_Application.Selection.Range, "Prix");
                m_Application.Selection.TypeParagraph();
    
                //object oAutoText;
                //oAutoText = m_Application.NormalTemplate
    
                document.MailMerge.MainDocumentType = WdMailMergeMainDocType.wdMailingLabels;
                document.MailMerge.OpenDataSource(System.IO.Path.GetTempPath() + "PrintStickers.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, "SELECT * FROM [Sheet1$]");
    
                m_Application.MailingLabel.CreateNewDocument("L7651", Type.Missing , "MyLabelLayout", Type.Missing, WdPaperTray.wdPrinterManualFeed);
                document.MailMerge.Destination = WdMailMergeDestination.wdSendToNewDocument;
                document.MailMerge.Execute();
    
                m_Application.Visible = true;

    • Modifié MoThA999 vendredi 8 novembre 2013 11:12
    vendredi 8 novembre 2013 11:09
  • Sur ce que j'ai vu, ça doit fonctionner.

    Vous ne cachez pas une exception avec un try/catch ?

    Voir aussi cet exemple :

     http://social.msdn.microsoft.com/Forums/en-US/28658257-42d0-41ac-91fc-3263df42e9e5/how-mailmergeopendatasource-in-word-automation

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 11 novembre 2013 14:23
  • Tel qu'il est là, le code tourne parfaitement.

    Mais ne crée que le layout sans que les champs ne soient remplis.

    Vu que je ne trouvais pas de solution, j'ai décidé de laisser tomber l'automation de Word qui semble ne plus voir fonctionner comme avant pour utiliser Drawing.Printing pour générer mes étiquettes et les impression et DrawString pour remplir les étiquettes.

    En tout les cas, merci pour l'aide.

    • Marqué comme réponse Aurel Bera lundi 11 novembre 2013 14:41
    lundi 11 novembre 2013 14:37