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

 Delphi Discussion :

Utilisation de l'insertion automatique dans Word


Sujet :

Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Utilisation de l'insertion automatique dans Word
    Bonsoir,

    C'est tout simple, je cherche à utiliser la fonctionnalité d'insertion automatique de Word via Delphi pour ajouter automatiquement des éléments à un document avec un simple appel.

    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          vMSWord := CreateOleObject('Word.Application');
          vMSWord.visible := true;
          vDocument:=vMSWord.Documents.open(vFile);
     
          if vDocument.BookMarks.Exists('obl1signet') then
          begin
            vBookMark := vDocument.BookMarks.Item('obl1signet');
            vBookMark.Select;   MSWord.ActiveDocument.AttachedTemplate.AutoTextEntries('oblique1').Insert(vMSWord.Selection.Range,RichText:=True);
            vSaveChanges := true;
            vDocument.Close(vSaveChanges);
            vMSWord.Quit;
            vMSWord := unassigned;
          end
    Je n'arrive pas à adapter (malgré moults essais) la syntaxe Vba d'appel à AutoTextEntries et voilà le message que je reçois :
    ...classe d'exception EOLEException "AutoTextEntries" n'est pas une méthode.
    Je précise que j'utilise des insertions automatiques associées au document word ouvert (d'où le AttachedTemplate) et non générales à word (normal.dot).
    Oblique1 correspond à une insertion automatique que j'ai défini et associé à mon document au préalable.

    Merci d'avance de vos réponses et j'espère avoir bien classé ce topic car c'est mon premier message ici.

  2. #2
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Ayant progressé sur l'utilisation du VBA word via Ole dans delhi, je viens moi même fournir la réponse à ma question ainsi qu'un code qui, je pense, peut être utile.

    Tout d'abord la méthode suivante (adapté du code Vba) fonctionne si votre document word possède bien un modèle (.dot) attaché au document.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MSWord.ActiveDocument.AttachedTemplate.AutoTextEntries('oblique1').Insert(vMSWord.Selection.Range,RichText:=True);
            vSaveChanges := true;
    Attached template fait référence au modèle associé au document, oblique1 étant l'insertion automatique à insérer.

    Dans mon cas celà ne fonctionne pas tout simplement parce que le modèle de mon document est le document lui même.... (je reprend le travail de quelqu'un d'autre et c'est un travail pas terrible... car il créé des .doc à partir de modèle .dot mais les sauvegarde sans spécifier que ces documents font référence à un modèle. (désolé si l'explication est fumeuse...).
    Bref si vous utilisez un modèle bien attaché à votre document cette syntaxe fonctionnera. Dans mon cas AttachedTemplate ne fonctionne pas sous delphi alors qu'il fonctionne en VBA.........

    Quoi qu'il en soit il m'a fallu trouvé une autre syntaxe et je la fourni ici car elle peut s'avérer pratiquer pour parcourir les éléments associés à un template.

    Bref voilà un code pratique qui a le mérite de trouver le modèle à appliquer et mon insertion automatique.

    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
    vMSWord := CreateOleObject('Word.Application');
    vDocument:=vMSWord.Documents.open(sWordDoc);
    vNameFile := extractfilename(sWordDoc);
     
    nbWordElm := vMSWord.Templates.Count;
    for idx := 1 to nbWordElm do
    begin
        if vMSWord.Templates.Item(idx).Name = vNameFile then
            idxTemplateFound := idx;
    end; {ceci me permet de localiser le modèle attaché à mon document (qui  
           correspond dans mon cas au fichier lui même et non au normal .dot   
           mais vous pouvez spécifier le nom d'un autre modèle ici)}
     
    //repère l'élément d'autotextentries correspondant à celui recherché
    nbWordElm:=MSWord.Templates.Item(idxTemplateFound).AutoTextEntries.Count;
    for idx := 1 to nbWordElm do
    begin
        if vMSWord.Templates.Item(idxTemplateFound).AutoTextEntries.
        Item(idx).Name=vNameAutoInsertion then
            idxEntriesFound := idx;
    end;                
    vMSWord.Templates.Item(idxTemplateFound).AutoTextEntries.Item(idxEntriesFound).Insert(Where:=vMSWord.Selection.Range,RichText:=True); 
     
    vSaveChanges := true;
    vDocument.Close(vSaveChanges);
    vMSWord.Quit;
    vMSWord := unassigned;
    Et voilà le travail, ça récupère le bon modèle et applique l'insertion automatique désirée....
    (pardon au modo d'avoir oublié les balises codes, ce sera fait à présent )

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

Discussions similaires

  1. [WD-2010] Insertion automatique dans fichier word - formulaire - générer
    Par zebulon94 dans le forum Word
    Réponses: 5
    Dernier message: 27/08/2014, 22h13
  2. Insertion automatique dans Word
    Par pasthou dans le forum Word
    Réponses: 1
    Dernier message: 17/09/2009, 01h14
  3. pb insertion automatique dans bd
    Par nicocaine dans le forum Windows
    Réponses: 1
    Dernier message: 26/07/2007, 15h02
  4. Réponses: 1
    Dernier message: 25/10/2006, 18h06

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