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

C++Builder Discussion :

Création "Bookmarks" dans WORD avec Borland C++


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut Création "Bookmarks" dans WORD avec Borland C++
    Bonjour, je dépose ce poste car je suis dans une impasse et malgré toutes mes recherches je n’ai pas trouvé de solution.
    Je voudrais créer via Borland un « Bookmark » (signet) dans un document Word.
    Voici le bout de code utilisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           vDoc.OlePropertyGet("Bookmarks").OleFunction("Add",
                    strPage1.c_str(),
                    vWordApp.OlePropertyGet("Selection").OlePropertyGet("Range")
                    );
             vDoc.OlePropertyGet("Bookmarks").OlePropertySet("DefaultSorting", 0); 
             vDoc.OlePropertyGet("Bookmarks").OlePropertySet("ShowHidden", false);
    Dès que l’appel à la création se fait, un message d’erreur « …. Class EOlesyserror with message « Exception occured ».
    D’où ma question est-il possible de créer un « Bookmark » par programmation Ole ? Si oui où est mon erreur?

    Merci à vous.

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut diouki
    C'est possible comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            String strPage1("aaa");
     
            vDoc.OlePropertyGet("Bookmarks").OleFunction("Add",
                    strPage1.c_str(),
                    vWordApp.OlePropertyGet("Selection").OlePropertyGet("Range")
                    );

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Bonjour Blondelle,

    Le bout de code que tu me donnes resemble étranchement à celui que j'ai posté et qui me pose problème. Je ne comprends pas ?????????

    Ton vDoc est bien une instance de "Documents" ?

    Bàt.

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    J'avais une erreur Ole et elle venait de la facon d'ecrire la chaine de caractere "strPage1", voici le bout de code de teste qui m'a servi en utilisant ton bout de 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
     
       Variant vWordApp, vDoc;
        try
        {
            vWordApp = Variant::CreateObject("Word.Application");
        }
        catch(...)
        {
            MessageBox(Handle, "Word!",
                    Application->Title.c_str(), MB_OK | MB_ICONERROR);
            vWordApp = Unassigned;
            return;
        }
            // Word
            vWordApp.OlePropertySet("Visible", true);
            // 
            vDoc = vWordApp.OlePropertyGet("Documents").OleFunction("Add");
            String strPage1("aaa"), strPage2("bbb"), strPage3("ccc");
            vDoc.OlePropertyGet("Bookmarks").OleFunction("Add",
                    strPage1.c_str(),
                    vWordApp.OlePropertyGet("Selection").OlePropertyGet("Range")
                    );

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Salut blondelle, désolé toujours la même erreur.

    Je travaille sous MS office professional Word 2003 SP3
    XP professional
    C++builder5 professional

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je pense que tu a bien " #include <utilcls.h> // ne pas oublier " dans ton entete, il y faut aussi dans certaines version de BCB ajouter " #include <ComObj.hpp> // a ajouter dans certains cas "

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Ajouté les deux includes, toujours même problème. C'est la seule commande OLE que je n'arrive pas à réaliser. Bizarre. Je vais chercher une autre solution à mon problème. Merci de ton aide et à bientôt.

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    A tu teste le code tel que je l'ai poste dans mon second post, a tout hasard

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Bonjour blondelle, j'ai testé ton code tel que tu l'as donné (copie, collé), introduit dans un nouveau projet mais rien à faire, toujours la même erreur.Egalement sur un autre Pc, toujour même erreur. A ne rien comprendre.

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je viens d'essayer avec Word 2003 C++ builder6 Windows XP Pack2 pas d'erreur, c'est vraiement bizarre

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    C'est à s'arracher les cheveux (il m'en reste quelques uns), Je viens de contrôler dans le fichier "Work_2K.h" et la syntaxe utilisée est correcte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Word_2k::BookmarkPtr __fastcall Add(BSTR Name/*[in]*/, TVariant* Range/*[in,opt]*/= TNoParam());
    .
    Pourquoi cela ne fonctionne pas ?????? MYSTERE

  12. #12
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Si je passe le nom du bootmark comme ceci cela fonctionne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            vDoc.OlePropertyGet("Bookmarks").OleFunction("Add",
                    "aaa",
                    vWordApp.OlePropertyGet("Selection").OlePropertyGet("Range")
                    );

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Ton dernier poste ma donne une idee, j'ai depose les composants Word lance la compilation et verifie les includes ajoutes par ces composants c'est
    #include <OleServer.hpp>

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Bonjour Blondelle, je n'ai pas oublié la discussion mais bon il y a eu les vacances ensuite la reprise donc pas beaucoup de temps. Pour résoudre mon problème d'impossibilité de création de Bookmarks, il semble que c'est lié à la version C++builder 5, j'ai contourné le problème en créant des hyperliens se rattachant à un texte et non à un signet. Pour l'instant çà me dépanne en attendant une version plus récente du C++Builder pour améliorer. Dans mon programme j’insère également des « comments » mais malheureusement une fois crée je ne sais plus changer le texte. J’arrive à les lister (voir code) mais je ne trouve pas de solution pour en modifier le texte. As-tu une solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     vComments = WD_Document.OlePropertyGet("Comments");
     iCount = vComments.OlePropertyGet("Count");
      for (int i = 1; i <= iCount; i++)
     {
      vComment = vComments.OleFunction("Item", i);
      aComment = vComment.OlePropertyGet("Range"); //Donne le contenu du "Comment" Ce que j'aimerais modifier
      qui = vComment.OlePropertyGet("Initial"); // Initiale du créateur du Comment.
      scopeComment = vComment.OlePropertyGet("Scope");  // Texte pris en début du Comment
      ListBox1->Items->Add(aComment);
      ListBox2->Items->Add(qui);
      ListBox3->Items->Add(scopeComment);
     }

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Solution pour le changement texte trouvée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vComment.OlePropertyGet("Range").OlePropertySet("Text","hello");

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/08/2006, 14h22
  2. Réponses: 5
    Dernier message: 12/06/2006, 09h31
  3. Réponses: 2
    Dernier message: 11/04/2006, 19h09

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