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 :

Substitution de textes par des images dans Word


Sujet :

Delphi

  1. #1
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut Substitution de textes par des images dans Word
    Bonjour,

    Je constitue des documents Word à partir de modèle (.DOT) et dans lesquels je dois substituer, non pas du texte par un autre, mais du texte par une image donnée...

    Sur la base de ce qu'il y a dans la FAQ (merci bidou ), j'ai adapté le code de recherche de texte. Celui-ci fait bien le bon nombre de recherches mais la substitution n'est pas comme attendue...l'image n'est pas située en lieu et place du texte qu'elle doit remplacer (le texte demeure à sa place dans le document et les images sont insérées au début du document)

    Ci-après, un extrait du code...
    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
     
    var 
       Param1,
       Param2,
       Param3,
       Param4,
       Param5,
       Param6,
       Param7,
       ZoneDeRecherche : OleVariant;
    .....
    Param1 := 0;
    ZoneDeRecherche := aOfficeApp.ActiveDocument.Content; // Id aOfficeApp.ActiveDocument.Range(Param1, Param1);
    Param1 := ChaineRecherche;
    Param2 := False;
    Param3 := True;
    Param4 := wdFindStop;
    Param5 := wdCharacter;
    Param6 := 1;
    repeat
          ZoneDeRecherche.Find.Execute(Param1,Param2,Param2,Param2,Param2,Param2,Param3,Param4,emptyparam,emptyparam,emptyparam);
          if ZoneDeRecherche.Find.Found then
          begin
               PhotoLink       := False;
               PhotoSaveWith   := True;
     
               // PhotoRange      := ZoneDeRecherche.Find.Parent;
               // aOfficeApp.ActiveDocument.InlineShapes.AddPicture(NomFichierImage, PhotoLink, PhotoSaveWith, PhotoRange);
     
               aOfficeApp.Selection.InlineShapes.AddPicture(NomFichierImage, PhotoLink, PhotoSaveWith, EmptyParam); 
         end;
    until not ZoneDeRecherche.Find.Found;
    J'ai bien essayé plusieurs façons avec ou sans le paramètre PhotoRange ci-dessus...mais rien n'y fait...et les aides de Word ainsi que la référence VB office ne sont pas trop claires sur le sujet...

    Il semble que le texte recherché, même s'il a été trouvé, ne constitue pas la sélection courante après le find.execute ....

    Je pense que c'est juste une histoire de sélection courante...mais je ne sais plus où chercher...

    Quelqu'un aurait-il la solution ?

    Merci d'avance

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    regarde si ce code peut être d'une utilité. Ici il s'agit de remplacer les images d'un doc par du texte :
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    procedure TForm1.ChangeImages;
    var S,
        NomFichier :String;
     
        MesImages: InlineShapes;
        MonImage: InlineShape;
        I,CountImages:integer;
     
        Number,
        Unit_ : OleVariant;
     
        ParagraphPrecedent : Paragraph;
        monStyle : Olevariant;
     
    begin
      // Récupére l'ensemble des listes du document spécifié
     MesImages:=WordDocument1.InlineShapes;
     CountImages:=MesImages.Count;
     Log.Lines.Add(Format('Mise en forme des images[%d]', [CountImages]));
     If CountImages=0
      Then Exit;
     
     ProgressBar1.Position:=0;
     ProgressBar1.Max:=CountImages;
     
     Number:=1;
     Unit_:=wdParagraph;
     
      // créer le répertoire Images dans celui du doc
     NomFichier:=LowerCase(GetPathArticle+'\'+FileNameDetail.FilePart+'\'+'images');
     if not DirectoryExists(NomFichier) then
       if not CreateDir(NomFichier) then
       raise Exception.Create('Impossible de créer '+CRLF+NomFichier);
     
     For I:=1 to CountImages Do
      begin
       With FileNameDetail do
        NomFichier:=LowerCase('image'+IntToStr(I)+'.JPG');
     
       S:='<image align="left" src="./images/'+NomFichier+'"/>'+CrLf;
     
       MonImage := MesImages.Item(Number);
       MonImage.Select;                   // les 2 instructions doivent se suivre
       WordApplication1.Selection.Copy;   // si insertion entre temps la selection n'est plus activée
          // Sélectionne le paragraphe qui précède la sélection.
       ParagraphPrecedent:=WordApplication1.Selection.Paragraphs.item(1);
       ParagraphPrecedent.Range.InsertParagraphBefore;
       ParagraphPrecedent:=ParagraphPrecedent.Previous(Number);
          // Evite d'insérer du texte avec le style du paragraph précédant le tableau
         // Il peut s'agir d'un titre et dans ce cas la liste est insérée au format Titre :-(
       monStyle:=Integer(wdStyleNormal);
       ParagraphPrecedent.Range.Set_Style(monStyle);
       With FileNameDetail do
        SaveImage(LowerCase(GetPathArticle+'\'+FileNameDetail.FilePart+'\'+'images'+'\'+NomFichier));
     
       Application.ProcessMessages;
     
       ClipBoard.Clear; // Evite la question par Word :
                        // Voulez-vous sauvegardez les infos du presse papier
     
       MonImage.Delete;
     
        // Insére le texte à la position du tableau courant ( supprimé )
       ParagraphPrecedent.Range.insertBefore(S);
     
       Application.ProcessMessages;
     
       ProgressBar1.Position:=ProgressBar1.Position+1;
      end;
      ProgressBar1.Position:=CountImages;
    end;

  3. #3
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut Cela ne m'aide pas trop...
    Désolé (et merci quand même), mais cela ne m'est pas trop utile...le pb vient de l'utilisation de la fonction de recherche de Word...A chaque fois qu'on trouve une chaine donnée, il faut lui substituer une image donnée.

    En le faisant via une macro qu'on enregistre, cela marche...mais le hic vient du fait que dans la macro, le texte est à la fois surligné et sélectionné avant d'effectuer l'insertion de l'image....

    Cela doit être possible de le faire en adaptant le bout de code que j'ai stipulé...mais comment ?

Discussions similaires

  1. Entourer un texte par des balises dans un textarea a la maniere d'un bbcode
    Par kilian67 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 04/06/2009, 03h33
  2. Réponses: 5
    Dernier message: 26/08/2008, 16h00
  3. Réponses: 4
    Dernier message: 08/05/2008, 16h07
  4. [Tableaux] remplacer du texte par des images
    Par elti69 dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2007, 10h14
  5. Réponses: 2
    Dernier message: 08/05/2006, 10h03

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