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 :

[OLE WORD] Erreur fonctionnement Word 2000 vs 2003


Sujet :

API, COM et SDKs Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut [OLE WORD] Erreur fonctionnement Word 2000 vs 2003
    Je rencontre un problème avec l'utilisation de Word en OLE.

    Voici ce que je fais

    1- J'ouvre une boite de dialogue pour le nom du fichier à enregistrer
    2- J'ouvre Word
    3- J'ouvre le fichier sélectionné
    4- Je rempli les signets du fichiers (Texte et image)
    5- J'enregistre le fichier avec les données modifier avec le nom de la boite de dialogue.
    6- Je ferme Word.

    Sur le poste avec word 2003, aucun problème.

    Sur le poste avec Word 2000, la boite de dialogue de word s'ouvre m'indiquant si je veux ou non sauvegarder les informations du fichier d'origine (alors qu'il ne devrait pas le faire) puis m'affiche un message indiquant que le nom de fichier n'est pas correcte.

    Ci dessous ce qui permet la génération du document

    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
     
     WordObj := TWordObj.Create; // Création de l'objet Word
        With WordObj do
        try
          FileName := GAPPPDOC + 'SiteAnnonces.doc';
          Open; // 
          SetSignet('REFERENCE',edtReference.Text);
          SetSignet('TITRE',edtTitre.Text);
          InsertImage('IMAGE','http://www.xxxxx/' + cboPhoto.Text);
          SetSignet('PRIX',edtPrix.Text);
          SetSignet('TEXTE',mmDescription.Text);
          if Pos('.doc',SaveDialog1.FileName) = 0 then
            SaveDialog1.FileName := SaveDialog1.FileName + '.doc';
          Save(SaveDialog1.FileName);
          Close;
          ModalResult := mrOk;
        finally
          WordObj.Free;
        end;
      end;
    Creation de l'objet Word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    constructor TWordObj.Create;
    begin
      inherited Create;
      try
        FComWord := GetActiveOleObject('Word.Application');
      Except on E:Exception do
        FComWord := CreateOleObject('Word.Application');
      end;
      FComWord.Visible := False; // Empeche l'affichage de Word
     
    end;
    Ouverture du fichier word

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TWordObj.Open;
    begin
      if FWordFileName <> '' then
        FDocument := FComWord.Documents.Open(FWordFileName);
    end;
    Ajout du texte par rapport au signets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TWordObj.SetSignet(SignetName, SignetValue: String);
    var
      BookMark,Content : Variant;
    begin
     if FDocument.BookMarks.exists(SignetName) then
     begin
       BookMark := FDocument.BookMarks.Item(SignetName);
       BookMark.Select;
       Content := BookMark.Range;
       Content.InsertAfter(SignetValue);
     end;
    end;
    Ajout de l'image par rapport à un signet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TWordObj.InsertImage(SignetName, ImageName: String);
    var
      BookMark,Content : Variant;
     
    begin
     if FDocument.BookMarks.exists(SignetName) then
     begin
       BookMark := FDocument.BookMarks.Item(SignetName);
       BookMark.Select;
       FComWord.Selection.InlineShapes.AddPicture( ImageName, False, True, EmptyParam);
     end;
    end;
    Sauvegarde du fichier modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TWordObj.Save(FileName: String);
    begin
      Try
        If FileName = '' then
          FDocument.Save
        else
          FDocument.SaveAs(FileName);
      Except on E:Exception do
        raise TSAVEERROR.Create(E.Message);
      end;
    end;
    Merci ^^

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Tu peux peut-être essayé cette astuce...


    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
     
    procedure TWordObj.Save(FileName: String);
    begin
      Try
        //== Evite la question Voulez-vous sauvegarder le document...
        FDocument.ActiveDocument.Saved = True
     
        If FileName = '' then
          FDocument.Save
        else
          FDocument.SaveAs(FileName);
      Except on E:Exception do
        raise TSAVEERROR.Create(E.Message);
      end;
    end;
    Il existe aussi plusieurs implémentation du SaveAs.. tu peux peut-être prendre
    celle avec 2 paramètres...le deuxième étant le format du fichier...

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    J'ai le message d'erreur suivant :

    La méthode ActiveDocument non supporté par l'objet automation
    J'ai recherché dans MSDN mais je n'ai rien trouvé correspondant à ActiveDocument dans l'objet de base automation (ou alors j'ai mal cherché )

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    essaie sans ActiveDocument
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     FDocument.Saved = True

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    En fait le problème venait d'ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InsertImage('IMAGE','http://www.xxxxx/' + cboPhoto.Text);
    Word 2000 n'accepte pas l'insertion d'image depuis une url (contrairement à Word 2003)
    J'ai donc fait une copie de l'image sur le disk dur, puis j'appelle cette image et ca fonctionne nikel

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

Discussions similaires

  1. [WD-2003] conversion d'une macro word 2000 en 2003
    Par JYPIQ62 dans le forum VBA Word
    Réponses: 5
    Dernier message: 25/07/2011, 22h01
  2. Erreure FAQ word ?
    Par dederfred dans le forum Delphi
    Réponses: 4
    Dernier message: 15/11/2006, 10h33
  3. Réponses: 4
    Dernier message: 12/10/2006, 17h03
  4. Erreur de compilation Access 2000 ==> Access 2003
    Par DeFCrew dans le forum Access
    Réponses: 5
    Dernier message: 02/08/2006, 16h34

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