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 :

Tableau Word avec OLE


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Par défaut Tableau Word avec OLE
    Bonjour,
    Actuellement en stage, je dois réaliser pour l'entreprise dans laquelle je suis une génération automatique de facture sur Word.
    Pour cela, je dois réaliser un tableau à taille variable.
    Et c'est là qu'est le problème : débutant en Delphi, je ne sais pas comment réaliser un tableau avec OLE, et je ne peux pas intégrer le tableau dans mon modèle puisqu'il est de taille variable.

    En cherchant je suis tombé sur ce lien :
    http://delphi.developpez.com/faq/?page=wordtableaux

    Pour le tester j'ai réalisé un copier/coller, mais beaucoup de mot de syntaxe ne sont pas reconnus par l'éditeur de code.

    Je demande donc votre aide pour réaliser cette mission qui m'a était confiée.

    TeuZ

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 519
    Par défaut
    Bonjour,
    la taille variable n'est pas un problème, dans l'exemple donné dans la FAQ tu tremplaces 5, 3 par des variables représentant le nombre de lignes et de colonnes que tu calcules dans ton appli.

    Sinon, il faut d'abord ajouter l'objet TWordApplication et le connecter - regarde toute la FAQ consacrée à Word

    FAQ Word

    A+

    Charly

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Par défaut
    Bonjour,
    Après plusieurs essais je reviens vers vous.

    Tout d'abord : TWordApplication est il intégré à word2000 (dans uses?) ?

    J'ai cherché dans la FAQ pour les différents composants, aucune erreur affiché à la base, mais quand je compile : Types incompatibles : '_Document' et 'Variant' & Types incompatibles : 'WordRange' et 'Variant'.

    J'ai donc essayé de changer ces types en Variant, mais là le débogueur renvoi "Opération de variant incorrecte".

    Je conçois que mon code est une suite de codes trouvés dans la FAQ mais je pensais pouvoir l'adapter.

    Il doit me manquait encore des trucs que j'ai oublié.

    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
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, word2000;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
     
      var
         DocWord:_document;
         Template,WordApplication1 , AsModel: OleVariant;
         Tableau:Table;
         i:Integer;
     
      begin
          WordApplication1.Connect;
          WordApplication1.Visible:=True;
          Template:='C:\Users\Clement - Stage\Desktop\New\Doc1.dotx';
          AsModel:=False;
          DocWord:=WordApplication1.Documents.Add(Template,AsModel);
     
          Tableau:=DocWord.Tables.Add(WordApplication1.Selection.Range,5,3);
          For i:= 1 To Tableau.Rows.Count Do
            Tableau.Cell(i, 2).Range.Text := 'Mon texte '+IntToStr(i);
     
     
          WordApplication1.disconnect;
     
     
      end;
     
    end.
    Mes questions sont peut être idiotes et la réponse sous mes yeux, mais pour le moment je ne vois pas comment faire.

    En tout cas merci Charly pour cette première réponse rapide.

    Edit : Je viens d'essayer http://delphi.developpez.com/faq/?pa...ructiontableau mais j'ai le même soucis.

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Je suggère que tu y ailles par étape. D'abord, il te faut lancer Word. Pour ça, tu peux suivre le tutoriel Pilotage OLE de Word à partir de Delphi

    Je ne connaissais pas l’existence dans les uses de word2000.

    Une fois que tu maîtriseras bien le lancement de word, tu peux t'aider du tutoriel pour les tableaux.

  5. #5
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 519
    Par défaut
    Bonjour,
    le fait de poser un composant WordApplication sur la fiche, ajoute automatiquement "WordXP, OleServer" à clauses uses

    mais chez moi, effectivement, avec D7, W7, Word2000 installé cela ne fonctionne pas

    je ne peux pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Try
        Wordapplication1.Connect;
        MessageDlg('Word est connecté', mtError, [mbOk], 0);
      except
         MessageDlg('Word n''est pas installé', mtError, [mbOk], 0);
         Abort;
      end;
      WordApplication1.AutoQuit := True ;
       WordApplication1.disconnect ;
    l'application se fige sur le connect.

    je pense qu'il faudrait que j'installe la bonne version de TWordApplication.

    ou bien c'est W7 qui refuse d'ouvrir WordApplication ?

    Je ne peux donc pas t'aider ...

    A+

    Charly

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Par défaut
    En fait, le lancement de Word n'est pas un problème, j'ai réalisé il y a quelques jours d'autres fichiers Word grâce à Delphi.

    J'ai utilisé ces commandes pour me coller à la FAQ au cas où, afin d'avoir les même variables etc ...

    Le problème vient de la génération d'un tableau. Et en suivant la partie "Tableaux" de la FAQ j'ai l'impression qu'il me manque des composants (uses, ...) car les types ne sont pas reconnus ou incompatibles entre eux, comme lorsque je compile:
    Types incompatibles : '_Document' et 'Variant' & Types incompatibles : 'WordRange' et 'Variant'.
    Okay Charly, merci quand même.

  7. #7
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 519
    Par défaut
    Effectivement, il faut suivre la méthode de Ero-Sennin pour s'affranchir des composants Word de Delphi :

    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
     
    procedure TForm3.Button2Click(Sender: TObject);
    var
        vMSWord : variant;
        vWDocument, vWDocuments : variant;
        aFileName : AnsiString;
    Begin
       vMSWord := CreateOleObject('Word.Application') ;
       vMSWord.Visible := true ;
       vWDocuments := vMSWord.Documents;
       vWDocument := vwDocuments.Add;
     
       ShowMessage('Word ouvert') ;
       vMSWord.Quit ;
       vMSWord :=  unassigned ;
    End;
    A+

    Charly

  8. #8
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 519
    Par défaut
    Voici la création d'un tableau à 3 colonnes et 5 lignes

    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 TForm3.Button2Click(Sender: TObject);
    var
        vMSWord : variant;
        vWDocument, vWDocuments : variant;
        aFileName : AnsiString;
    Begin
       vMSWord := CreateOleObject('Word.Application') ;
       vMSWord.Visible := true ;
       vWDocuments := vMSWord.Documents;
       vWDocument := vwDocuments.Add;
       vWDocument.Tables.Add(vMSWord.Selection.Range,5,3);
       ShowMessage('Word ouvert') ;
       vMSWord.Quit ;
       vMSWord :=  unassigned ;
    End;
    A+

    Charly

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/07/2011, 00h50
  2. Mise en forme tableau word avec VB6
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/04/2007, 12h50
  3. Réponses: 2
    Dernier message: 12/02/2007, 13h39
  4. Manipulation d'un tableau sous Word avec vba
    Par Françoise Sagan dans le forum VBA Word
    Réponses: 1
    Dernier message: 02/12/2006, 13h54
  5. Pilotage OLE Word avec Visual C++
    Par baka02 dans le forum MFC
    Réponses: 2
    Dernier message: 20/03/2006, 13h04

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