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

API, COM et SDKs Delphi Discussion :

Piloter Word 2000 et Word XP (TWordApplication)


Sujet :

API, COM et SDKs Delphi

  1. #1
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut Piloter Word 2000 et Word XP (TWordApplication)
    Bonjour,

    Je tente de piloter Word pour générer un document.
    J'utilise une methode mais apparement ca ne marche que sous Word XP et pas sur Word 2000.

    Suis-je obliger d'utiliser OLE pour que ca soit compatible sur les 2 version de Word ?

    Voici le code qui marche sous Word XP et pas sous Word 2000 :

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Forms,
      OleServer, StdCtrls, Controls,
      Buttons, WordXP;
     
    type
      TForm1 = class(TForm)
        wordapp: TWordApplication;
        Label1: TLabel;
        BitBtn1: TBitBtn;
        procedure BitBtn1Click(Sender: TObject);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     
        try
           wordapp.Connect;
         except
          Label1.Caption := 'Erreur : Word n''est pas installé !';
          Abort;
        end;
     
         wordapp.Visible := true;
     
     
    end;
     
    end.
    Merci de votre aide !

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut


    si tu desire uniquement ouvrir un document ole n'est pas necessaire
    par contre si tu veut modifier les donnée de facon dynamique le plus efficace est d'utilise ole

    qu'elle est le type d'erreur que tu obtient entre les deux version
    d'apres ce que je vois tu essai de rendre word visible sans document
    je croit que c'est ici que le probleme intervient


    @+ Phil

  3. #3
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Merci de ta réponse.

    En fait, avec Word XP, tout marche bien, ca ouvre word.
    Alors qu'avec Word 2000, ca fait planter Word, rien ne s affiche, je suis obligé par la suite à killer le processus.

    voici une modification comme tu me l a suggérer, maintenant ca ouvre un document vide, mais toujours le meme probleme :
    ca marche sous XP
    ca plante sous 2000 !

    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
     
    v
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Forms,Variants,
      OleServer, StdCtrls, Controls,
      Buttons, WordXP;
     
    type
      TForm1 = class(TForm)
        wordapp: TWordApplication;
        Label1: TLabel;
        BitBtn1: TBitBtn;
        procedure BitBtn1Click(Sender: TObject);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var DocWord:_document;
     
    begin
     
        try
           wordapp.Connect;
         except
          Label1.Caption := 'Erreur : Word n''est pas installé !';
          Abort;
        end;
     
         wordapp.Visible := true;
     
          DocWord:=wordapp.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
     
    end;
     
    end.

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Change l'unité utilisé dans la clause uses. Remplace WordXP par Word2000 ou, encore mieux, par Word97. Les différentes versions de Word offrent une compatibilité ascendante entre elles.
    Il te faut spécifier l'unité correspondant à la version minimale qui t'es nécessaire. Vu ce que tu veux faire, Word97 suffit largement.

  5. #5
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    ca ne marche pas.

    TWordApplication viens de la libraire WordXP, lorsque je supprime dans les uses WordXP, il reviens automatiquement.

    J'ai rajouté Word97 et/ou Word2000, mais rien n'y fait, cela fait toujours planter Word.

    Une autre idée ? ou cela ne marchera pas sous Word2000 ?

    Je tiens à préciser que lorsque j'auré réussit cela, je ferais des truc + compliké, style, changement de signets etc...

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut


    le plus simple alors serait de gerer toi meme les variant utilise par OLE
    et ne pas utilisé le TWordapplication

    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
    procedure TMyClassWord.OpenWordApp;
    begin
       MsWord                := Unassigned ;
       TemplateWindows  := Unassigned ;
       DataWindows        := Unassigned ;
       try
          MsWord := GetActiveOleObject('Word.Application');
      except
         CreateAppWord ;
      end;
      OpenDoc;
    end;
    {------------------------------------------------------------------------------}
    procedure TMyClassWord.OpenDoc;
    begin
      MsWord.WindowState := wdWindowStateMaximize ;
      MsWord.Visible := true;
    end;
    {------------------------------------------------------------------------------}
    procedure TMyClassWord.CreateAppWord ;
    begin
      try
        MsWord := Unassigned;
        MsWord := CreateOleObject(WordAppCLassName);
      except
         raise Exception.Create('Impossible de creer un document word. ');
      end;
    end;
    {------------------------------------------------------------------------------}

    @+ Phil

  7. #7
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    re merci de ta réponse, en fait je conné cette méthode et ca marche bien par OLE, mé le truc, pour tout te dire, je reprend une application qui est toute faite, et ki utilise la 1ere methode que j'ai évoqué.

    Donc, je me demandé, au lieu de tout redévelopper, si ca ne marcher vraiment pas sous Word2000.

    Je voudrai en être sûr !

  8. #8
    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

  9. #9
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    O la la !!! ca marche !!!
    Incroyable !! je pensais pas m'en sortir !!!
    C'est super cool !!

    Merci à Anapurna, Pierre Castelain pour leur aide et Laurent Dardenne pour la solution finale.

    Donc, pour résumer : Pour pouvoir utiliser un méthode de pilotage de Word XP et Word 2000, il faut désactiver les composants installés par défaut sur Delphi 7 à savoir :

    le package : "Microsoft Office XP Sample Automation Server Wrapper Components" (c:\delphi7\bin\dclofficexp70.bpl)

    avec le menu "component > install pakages..."

    et faire : "Ajouter (add) et choisir le package : c:\delphi7\bin\dcloffice2k70.bpl) qui est : "Microsoft Office 2000 Sample Automation Server Wrapper Components"

    Merci encore, et je félicite les administrateurs et modérateurs de "développez.com" qui est pour moi le meilleur endroit pour apprendre à développer.

    Merci !!

  10. #10
    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
    Citation Envoyé par gmc
    Merci encore
    , de rien.

    Citation Envoyé par gmc
    je félicite les administrateurs et modérateurs de "développez.com"
    Mais aussi les membres du forum qui par leurs solutions proposées permettent d'enrichir la FAQ.

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

Discussions similaires

  1. [OLE WORD] Erreur fonctionnement Word 2000 vs 2003
    Par Rayek dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/07/2008, 09h32
  2. comment créer un add-in pour Word 2000 - XP2003 ???
    Par gide_x dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 13/11/2005, 19h22
  3. date macro word 2000
    Par cmgirondins dans le forum VBA Word
    Réponses: 14
    Dernier message: 07/09/2005, 11h09
  4. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13

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