FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 933, dernière mise à jour : 28 septembre 2024 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.
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; |
Néanmoins, pour accéder au contenu d'une cellule, vous devez passer par l'objet Range de l'objet Cell.
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; |
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; |
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; |
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; |
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; |
Dans ce cas on peut ajouter une ligne supplémentaire lors de la création du tableau et la supprimer en fin de traitement.
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; |
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 çaLes 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 © 2024 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.