FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 920, dernière mise à jour : 8 novembre 2019  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireMicrosoft OfficeMicrosoft WordTableaux (6)
précédent sommaire suivant
 

Utiliser une variable objet Table.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
Var Tableau:Table; 
    i:Integer; 
begin 
  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); 
End;
La navigation dans les tableaux est assez similaire à celle d'Excel avec des objets Cells, Columns etc.

Néanmoins, pour accéder au contenu d'une cellule, vous devez passer par l'objet Range de l'objet Cell.

Mis à jour le 18 janvier 2014 bidou

Deux possibilités.

Soit on applique un format prédéfini

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
Var Tableau:Table; 
    Format:OleVariant; 
begin 
  Format:=wdTableFormatGrid8; 
  Tableau.AutoFormat(Format,EmptyParam, 
      EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
      EmptyParam,EmptyParam,EmptyParam,EmptyParam); 
End;
Soit on gère soit même le format.
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Var Tableau:Table; 
begin 
//  Tableau.AutoFitBehavior (wdAutoFitContent) 
  With Tableau Do 
  Begin 
    Borders.Item(wdBorderLeft).LineStyle := wdLineStyleSingle; 
    Borders.Item(wdBorderRight).LineStyle := wdLineStyleSingle; 
    Borders.Item(wdBorderTop).LineStyle := wdLineStyleSingle; 
    Borders.Item(wdBorderBottom).LineStyle := wdLineStyleSingle; 
    Borders.Item(wdBorderHorizontal).LineStyle := wdLineStyleDot; 
    Borders.Item(wdBorderVertical).LineStyle := wdLineStyleDot; 
    Borders.Shadow := False; 
  End; 
End;
Ce code ajuste la largeur des colonnes à leur contenu, encadre le tableau avec une ligne continue et les cellules en pointillé.

Mis à jour le 18 janvier 2014 bidou

La manipulation est un peu particulière.

Si on travaille uniquement avec les collections exposées par le tableau, on n'accède pas à des méthodes comme Copy ou Paste.

Par contre, l'objet Selection expose ces méthodes.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
Var Tableau:Table; 
begin 
  Tableau :=DocWord.Tables.Item(1); 
  If Tableau.Rows.Count > 10 Then 
  Begin 
    Tableau.Rows.Item(1).Select; 
    WordApplication1.Selection.Copy; 
    Tableau.Rows.Item(11).Select; 
    WordApplication1.Selection.Paste; 
    Tableau.Rows.Item(11).Select; 
    WordApplication1.Selection.SplitTable; 
  End; 
End;

Mis à jour le 18 janvier 2014 bidou

Avant de pouvoir accéder à un tableau on doit en récupérer un à partir de la collection Tables.
On déclare une variable T de type Table puis on lui affecte un tableau en utilisant la méthode Item :

Code delphi : Sélectionner tout
WordDocument1.Tables.item(1);
Code delphi : Sélectionner tout
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
var 
  Tableau    : Table; 
  CurrentRow : Row; 
  
  CelluleText  : String; 
  myCols,NbCol : Integer; 
  myRows,NbRow : Integer; 
begin 
    // nombre de tableau dans le document = DocWord.Tables.Count 
  
     // Récupére le tableau numéro 1 
  Tableau:=DocWord.Tables.item(1); 
  
     // Récupére le nombre de ligne total 
  NbRow := Tableau.Rows.Count; 
  
     // Récupére le nombre de Colonne total 
  NbCol := Tableau.Columns.Count; 
  
    //Lecture du tableau ligne 1 colonne1 
    //                   ligne 1 colonne2 ... 
  For myRows:=1 to NbRow do 
  begin 
     // Récupére la ligne courante 
   CurrentRow:=Tableau.Rows.Item(myRows); 
     // Récupére le nombre de colonne de la ligne courante 
   NbCol:=CurrentRow.Cells.count; 
  
   For myCols:=1 to NbCol do 
    begin 
       // Récupére le text pour un pré-traitement 
     CelluleText:=Tableau.Cell(myRows,myCols).Range.Text; 
     if not VarisEmpty(CelluleText) then   // Traite les cellules vides 
      begin 
         // Supprime les Tabulations 
       CelluleText := StringReplace(CelluleText,#$D, '', [rfReplaceAll]); 
  
         // Supprime les coupures de ligne 
       CelluleText := StringReplace(CelluleText, #$7, '', [rfReplaceAll]); 
  
         //Mémorise dans une liste, 
      LBLigneWord.Items.Add(CelluleText); 
      end 
    end; 
    // Résultat au format Texte 
  LBLigneWord.Items.SaveToFile('Resultat.txt'); 
 end; 
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

La propriété Rows d'un objet tableau contient la liste des lignes de ce tableau.
On utilise La méthode Add de cette collection pour insérer une nouvelle ligne.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Var Tableau:Table;  
    i:Integer;  
    DefaultTableBehavior,  
    AutoFitBehavior: OleVariant;  
  
    Lignes: Rows;  
    BeforeRow: OleVariant;  
  
begin  
  DefaultTableBehavior:=wdWord9TableBehavior; // Comportement a adapter selon votre context 
  AutoFitBehavior:=wdWord8TableBehavior;  
  
  Tableau:=WordDocument1.Tables.Add(WordDocument1.Range,5,3,  
                                    DefaultTableBehavior,AutoFitBehavior);  
  
  For i:= 1 To Tableau.Rows.Count Do  
    Tableau.Cell(i, 2).Range.Text := 'Mon texte '+IntToStr(i);  
  
    //Récupére la derniére ligne  
  BeforeRow:=Tableau.Rows.Item(Tableau.Rows.Count);  
   // Ajoute avant la derniére  
  Tableau.Rows.Add(BeforeRow);  
End;
L'inconvénient de cette méthode est qu'on ne peut pas insérer une nouvelle ligne après la dernière ligne. Il n'existe pas de paramètre AfterRow.
Dans ce cas on peut ajouter une ligne supplémentaire lors de la création du tableau et la supprimer en fin de traitement.

Mis à jour le 18 janvier 2014 Laurent Dardenne

Pour construire un tableau dans Word à partir de Delphi sans avoir à le faire cellule par cellule, on peut simplement utiliser la méthode ConvertToTable de l'objet WordDocument.

Voici un exemple qui illustre cela :

Code delphi : Sélectionner tout
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
var  
 TexteTableau:Olevariant;  
  
 Unit_,  
 Extend: OleVariant;  
  
 MaZone: OleVariant;  
 StartZone: Integer;  
 EndZone: Integer;  
  
 Separator: OleVariant;  
 Tableau : Table;  
  
begin  
  // Définit le texte à convertir  
 TexteTableau:='C1_Premier;C2_Second;C3_Troisième'+#13#10+ 
                        'L1_Premier;L2_Second;L3_Troisième'+#13#10+ 
                        'L2_Premier;L2_Second;L2_Troisième'+#13#10;  
  
  //Se positionne en début de document  
 Unit_:=wdStory;  
 Extend:=wdExtend;  
 WordApplication1.Selection.HomeKey(Unit_,Extend);  
  
  //Insère le texte  
 WordDocument1.Range.InsertAfter(TexteTableau);  
  
 // Utilise la méthode SetRange pour redéfinir la valeur de  
 // la variable MaZone de sorte qu'elle fasse référence  
 // aux trois premiers paragraphes du document actif.  
 MaZone:=WordDocument1.Paragraphs.Item(1).Range;  
  StartZone:=WordDocument1.Paragraphs.Item(1).Range.Start;  
  EndZone:=WordDocument1.Paragraphs.Item(3).Range.End_;  
  
 MaZone.SetRange(StartZone,EndZone);  
  
 MaZone.ConvertToTable(Separator:=';');  
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.