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

MATLAB Discussion :

Comment créer des liens hypertextes dans Word ?


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Engineering Manager
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Engineering Manager
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Comment créer des liens hypertextes dans Word ?
    Bonjour,

    Je chercher à générer des rapports à partir de MATLAB en utilisant ActiveX dans Word. J'arrive à écrire du texte, insérer des figures, etc... Par contre impossible de générer des liens "hyperlinks" vers des fichiers.

    Exemple de code .m :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %----------------------------------------
    clc
    clear all
    WordFileName='TestDoc.doc';
    CurDir=pwd;
    FileSpec = fullfile(CurDir,WordFileName);
    [ActXWord,WordHandle]=StartWord(FileSpec);
    title='mon image'
    file='C:\testing\image.fig'
    ActXWord.ActiveDocument.Hyperlinks.add(title,file);
    %-------------------------------------------
    Erreur retournée par MATLAB :
    ??? No appropriate method, property, or field add for class
    Interface.Microsoft_Word_14.0_Object_Library.Hyperlinks.
    Merci d'avance !!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    La méthode exacte est : ActXWord.ActiveDocument.Hyperlinks.Add avec une majuscule.

    Par contre, le premier argument doit être de type Range ou un graphique. Le texte à afficher est représenté par l'argument TextToDisplay (Voir documentation).

  3. #3
    Candidat au Club
    Homme Profil pro
    Engineering Manager
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Engineering Manager
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton aide,

    J'ai mis le A majuscule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clc
    clear all
     
    WordFileName='TestDoc.doc';
    CurDir=pwd;
    FileSpec = fullfile(CurDir,WordFileName);
    [ActXWord,WordHandle]=StartWord(FileSpec);
     
    title='mon image'
    file='C:\testing\image.fig'
    ActXWord.ActiveDocument.Hyperlinks.Add(title,file);
    L'erreur devient :
    ??? No method 'Add' with matching signature found for class
    'Interface.Microsoft_Word_14.0_Object_Library.Hyperlinks'.
    Tu expliques qu'il faut que le premier argument doit être de type range : je pense que ce n'est pas le cas mais je ne sais pas comment faire ça !

    Merci !

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Je suis plus à l'aise avec Excel qu'avec Word mais je vais essayer de te donner une piste.

    Soit un fichier ressources-MATLAB.docx qui contient le texte suivant :
    Les ressources de la rubrique MATLAB de Developpez.com : les tutoriels, la FAQ, les critiques de livres...
    Pour ajouter des liens à certains endroits, on peut parcourir le texte mot à mot comme ceci :

    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
    Word = actxserver('Word.Application');
     
    % Word.Visible = true;
     
    Document = Word.Documents.Open('D:\ressources-MATLAB.docx');
     
    c = Document.Words.Count;
     
    for n = 1:c
     
        str = strtrim(Document.Words.Item(n).Text);
     
        switch str
     
            case 'ressources'
     
                s = Document.Words.Item(n).Start;
                e = Document.Words.Item(n).End;
                r = Document.Range(s,e);
     
                Document.Hyperlinks.Add(r,'http://matlab.developpez.com/');
     
            case 'tutoriels'
     
                s = Document.Words.Item(n).Start;
                e = Document.Words.Item(n).End;
                r = Document.Range(s,e);
     
                Document.Hyperlinks.Add(r,'http://matlab.developpez.com/tutoriels/');
     
            case 'FAQ'
     
                s = Document.Words.Item(n).Start;
                e = Document.Words.Item(n).End;
                r = Document.Range(s,e);
     
                Document.Hyperlinks.Add(r,'http://matlab.developpez.com/faq/');  
     
            case 'livres'
     
                s = Document.Words.Item(n).Start;
                e = Document.Words.Item(n).End;
                r = Document.Range(s,e);
     
                Document.Hyperlinks.Add(r,'http://matlab.developpez.com/livres/');  
     
        end
     
    end
     
    Document.Save;
    Document.Close;
     
    Word.Quit;
    Si le texte est plus long, on peut utiliser la collection Paragraphs pour se rendre directement au paragraphe concerné.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Homme Profil pro
    Engineering Manager
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Engineering Manager
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut C'est laborieux mais ça marche ! Merci !
    A force de persévérer et surtout grâce à vos aides respectives, voici 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
    14
    15
    16
    17
    18
    19
    clc
    clear all
     
    WordFileName='TestDoc.doc';
    CurDir=pwd;
    FileSpec = fullfile(CurDir,WordFileName);
    [ActXWord,WordHandle]=StartWord(FileSpec);
     
    title='mon image'
    file='C:\testing\image.fig'
     
    ActXWord.Selection.TypeText(title);
    ActXWord.Selection.HomeKey;
    start = get(ActXWord.Selection,'Start');
    ActXWord.Selection.EndKey;
    end1 = get(ActXWord.Selection,'End');
    r = WordHandle.Range(start,end1);
    WordHandle.Hyperlinks.Add(r,file);
    ActXWord.Selection.TypeParagraph
    C'est un peu compliqué mais ça marche !

    La confusion vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ActXWord,WordHandle]=StartWord(FileSpec);
    Qui est en fait :
    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
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % SUB-FUNCTIONS
    % Creator Andreas Karlsson; andreas_k_se@yahoo.com
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function [actx_word,word_handle]=StartWord(word_file_p)
        % Start an ActiveX session with Word:
        actx_word = actxserver('Word.Application');
        actx_word.Visible = true;
        trace(actx_word.Visible);  
        if ~exist(word_file_p,'file');
            % Create new document:
            word_handle = invoke(actx_word.Documents,'Add');
        else
            % Open existing document:
            word_handle = invoke(actx_word.Documents,'Open',word_file_p);
        end           
    return
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Je me suis embouillé entre 'actx_word' et 'word_handle'.
    'actx_word' : c'est la session ActiveX ?
    'word_handle' : c'est le document ?

    Bon, il me reste à mettre ça dans mon vrai code...
    Ben merci en tous cas !!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordHandle.Hyperlinks.Add(ActXWord.Selection.Range, file, '','', title)
    pour insérer le lien à la position courante.
    Attention tout de même à éviter d'utiliser des variables de même nom que des fonctions existantes (ici title). Voir Conventions de noms : variables.

    'actx_word' : c'est la session ActiveX ?
    'word_handle' : c'est le document ?
    Si tu fais du VBA, ActXWord représente l'objet Word, et WordHandle représente l'objet Document que tu as ouvert et dans lequel tu travailles.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Si tu fais du VBA, ActXWord représente l'objet Word,
    Je dirais plutôt l'objet Application... et l'application est ici Word
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Candidat au Club
    Homme Profil pro
    Engineering Manager
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Engineering Manager
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordHandle.Hyperlinks.Add(ActXWord.Selection.Range, file, '','', title)
    C'est effectivement plus simple et exactement ce que je veux faire ...

    C'est beau !

Discussions similaires

  1. [Débutant] comment créer des liens hypertexte dans une webpart
    Par zanoubya dans le forum SharePoint
    Réponses: 3
    Dernier message: 26/08/2013, 10h16
  2. Comment modifier un lien hypertexte dans Word
    Par QuickSave dans le forum Delphi
    Réponses: 3
    Dernier message: 05/01/2007, 13h11
  3. [FLASH 5] Comment créer un lien hypertexte
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 30/03/2006, 12h26
  4. Comment créer un lien hypertexte avec une liaison OLE Excel ?
    Par vieuxsinge dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 08/12/2005, 17h16
  5. Réponses: 3
    Dernier message: 26/10/2004, 07h31

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