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

Langage Delphi Discussion :

OLE Word => serveur RPC indisponible !?


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 912
    Points : 6 032
    Points
    6 032
    Par défaut OLE Word => serveur RPC indisponible !?
    En suivant l'exemple de la FAQ sur le pilotage OLE de Word, un button déclenche :
    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
    procedure TOKBottomDlg.SpeedButton4Click(Sender: TObject);
    var
        DocWord:_Document;
        i:integer;
        FileName: OleVariant; 
        ConfirmConversions: OleVariant;
        ReadOnly: OleVariant;
        AddToRecentFiles: OleVariant;
        PasswordDocument: OleVariant;
        PasswordTemplate: OleVariant;
        Revert: OleVariant;
        WritePasswordDocument: OleVariant;
        WritePasswordTemplate: OleVariant;
        Format: OleVariant;
        Encoding: OleVariant;
        Visible: OleVariant;
        Zone:Range;
        Signet,SaveChanges:OleVariant;
    begin
     
        FileName:=ExtractFilePath(ParamStr(0))+'MAtrice.doc'; // ou Document.rtf, ...
        ConfirmConversions:=False;
        ReadOnly:=False;
        AddToRecentFiles:=False;
        PasswordDocument:=EmptyParam;
        PasswordTemplate:=EmptyParam;
        Revert:=False;
        WritePasswordDocument:=EmptyParam;
        WritePasswordTemplate:=EmptyParam;
        Format:=EmptyParam;
        Encoding:=EmptyParam;
     
        Visible:=True; // Le serveur COM est affiché 
     
        DocWord:=WordApplication1.Documents.Open(FileName,ConfirmConversions,ReadOnly,
                                                AddToRecentFiles,PasswordDocument,
                                                PasswordTemplate,Revert,
                                                WritePasswordDocument,
                                                WritePasswordTemplate,Format,
                                                Encoding,Visible);
    // mes ajouts de signets
        Signet:='MOA';
        Zone:=WordApplication1.ActiveDocument.Bookmarks.Item(Signet).Range;
        Zone.Text := MOA1;
     
        FileName:=ExtractFilePath(ParamStr(0))+ID_appli+'.doc';
        DocWord.SaveAs(FileName,EmptyParam,EmptyParam,
                     EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                     EmptyParam,EmptyParam,EmptyParam,EmptyParam);
        SaveChanges := wdDoNotSaveChanges;
        WordApplication1.Quit(SaveChanges);
    end;
    Le pb : au 1er clic ça marche nickel, mais si je re-clique j'ai une exception
    OLE
    Le serveur RPC n'est pas disponible...
    Je n'ai pas vu de process fantôme qui trainait.

    Il doit manquer un release d'une ressource, mais la FAQ semble muette sur le sujet

  2. #2
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut
    il faut que tu te déconnecte du serveur RPC.

    wordapplication1.quit demande au serveur de demandé à word de quitter mais ton objet wordapplication1 est toujours connecté. donc le serveur RPC ne peut répondre à une nouvelle demande.



    Tu peux automatiser ça sur l'évenement OnQuit du
    WordApplication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wordApplication1.disconnect;

    et n'oublie pas autoquit à true dans les propriétés.

    Attention à l'utilisation des composants Wordapplication et worddocument. ils sont lié à une version d'office.

  3. #3
    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,
    quelle est exactement la QR concernée ?

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 912
    Points : 6 032
    Points
    6 032
    Par défaut
    Citation Envoyé par RamDevTeam
    il faut que tu te déconnecte du serveur RPC.

    wordapplication1.quit demande au serveur de demandé à word de quitter mais ton objet wordapplication1 est toujours connecté. donc le serveur RPC ne peut répondre à une nouvelle demande.



    Tu peux automatiser ça sur l'évenement OnQuit du
    WordApplication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wordApplication1.disconnect;

    et n'oublie pas autoquit à true dans les propriétés.

    Attention à l'utilisation des composants Wordapplication et worddocument. ils sont lié à une version d'office.
    Oui, oui, c'était bien ça....

    Grand merci.


    Laurent: si "QR" veut dire n° d'entrée dans la FAQ, il s'agit de la 13.2 (http://delphi.developpez.com/faq/?page=worddelphi

    et plus précisément, la FAQ en défaut est http://delphi.developpez.com/faq/?pa...elphi#wordword ...

    Donc au choix:
    - soit amender la FAQ de Bidou
    - soit ajouter une FAQ:

    Comment libérer l'instance de TWordApplication ?

    Tout appel à la méthode connect de l'objet TWordApplication doit être suivi, en fin d'utilisation, d'un appel à la méthode disconnect, sous peine de déclencher une exception OLE "Le serveur RPC n'est pas disponible" en cas de nouvel appel à connect.

    A cet effet, il est recommandé de déporter cet appel dans le gestionnaire d'événement OnQuit du TWordApplication:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure T<<mon_dialog>>.WordApplication1Quit(Sender: TObject);
    begin
         wordApplication1.disconnect;
    end;
    en ayant pris soin de positionner à true sa propriéré AutoQuit.


    Je pense d'ailleurs que même motif, même punition pour Excel and co.

  5. #5
    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
    Merci,
    je vais complèter cette QR (Question/Réponse dans notre jargon)
    Il manque aussi un lien sur ce tutoriel :
    http://lfe.developpez.com/PasWord/

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 14/01/2015, 00h41
  2. Réponses: 25
    Dernier message: 25/04/2008, 15h23
  3. [vb.net] initialisation MS JET OLE DB/exlorateurs serveurs
    Par Manix dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/08/2005, 01h57
  4. Access - Excel - Serveur RPC
    Par lorang dans le forum Access
    Réponses: 29
    Dernier message: 23/02/2005, 15h14
  5. [Ole Word] Fermeture du OleContainer
    Par nanomag dans le forum Composants VCL
    Réponses: 6
    Dernier message: 19/07/2004, 18h53

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