Comment travailler avec les tables dans .NET

Comment travailler avec les tables dans .NET

Ce guide montre comment créer, mettre en forme et lire des tableaux de manière programmatique dans Aspose.Words FOSS pour .NET, en utilisant le Table, Row, et Cell classes dans le Aspose.Words.Tables espace de noms avec DocumentBuilder. Il couvre la construction d’un tableau à partir de zéro, la mise en forme des cellules et des lignes lors de la création, le contrôle de la mise en page globale du tableau et AutoFit, la définition des largeurs préférées, la fusion des cellules, et la lecture des tableaux déjà présents dans un document chargé.

Guide étape par étape

Étape 1: installer le package

Aspose.Words FOSS for .NET ne publie pas encore de package NuGet — compilez la bibliothèque à partir du code source à la place. Clonez https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, puis compilez Aspose.Words.sln en configuration Release avec le SDK .NET et référencez l’assembly Aspose.Words résultant dans votre projet. La bibliothèque cible .NET Standard 2.0, elle s’exécute donc sur .NET Framework 4.6.2+ et .NET 6/8/10.


Étape 2: importer les classes requises

Ajoutez une directive using Aspose.Words; pour les classes de document de base (Document, DocumentBuilder), ainsi qu’une directive using Aspose.Words.Tables; pour les classes spécifiques aux tables couvertes par ce guide — Table, Row, Cell, CellFormat, RowFormat, PreferredWidth, et les énumérations associées.


Étape 3 : Construisez une nouvelle table avec DocumentBuilder

Créez un Document et un DocumentBuilder qui y sont liés, puis appelez DocumentBuilder.StartTable() pour démarrer une table au curseur. Pour chaque cellule d’une ligne, appelez DocumentBuilder.InsertCell(), puis fermez la ligne avec DocumentBuilder.EndRow(). Répétez autant de fois que nécessaire pour les lignes de la table, et fermez la table entière avec DocumentBuilder.EndTable(). Chaque StartTable() nécessite un EndTable() correspondant, et chaque ligne nécessite un EndRow() correspondant, sinon l’état interne du constructeur — et l’arbre de document résultant — devient malformé.


Étape 4 : Formatez les cellules et les lignes pendant la construction

Définissez DocumentBuilder.CellFormat et DocumentBuilder.RowFormat avant d’appeler InsertCell() ou EndRow() afin d’appliquer le formatage aux cellules et aux lignes que le constructeur est sur le point de créer — ces deux propriétés servent de modèle pour le nouveau contenu, et non de modification rétroactive des cellules déjà insérées. CellFormat expose Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth et les quatre propriétés de remplissage (LeftPadding, RightPadding, TopPadding, BottomPadding), qui peuvent toutes être définies en une fois avec SetPaddings(). RowFormat expose Borders, Height, HeightRule, AllowBreakAcrossPages et HeadingFormat. Appelez CellFormat.ClearFormatting() ou RowFormat.ClearFormatting() pour réinitialiser l’un ou l’autre aux valeurs par défaut avant de définir de nouvelles valeurs pour la ligne ou la cellule suivante.


Étape 5 : Définissez la mise en page du tableau et AutoFit

Une fois le tableau créé, définissez les propriétés de mise en page directement sur l’objet Table : Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) et TextWrapping. Appelez Table.SetBorders() pour appliquer un style de bordure, une largeur et une couleur sur l’ensemble du tableau, ou Table.SetBorder() pour définir un seul côté; ClearBorders() et ClearShading() réinitialisent ces paramètres. Table.AutoFit(AutoFitBehavior) redimensionne le tableau et ses cellules selon le comportement choisi — appelez-le à nouveau après toute modification structurelle, car il reflète l’état du tableau uniquement au moment de son exécution, pas en continu.


Étape 6 : Définissez les largeurs préférées et celles des cellules

Créez des valeurs de largeur avec les méthodes de fabrique statiques PreferredWidth.FromPercent() pour une mise en page qui s’adapte à la largeur de page disponible, ou PreferredWidth.FromPoints() pour une largeur fixe; PreferredWidthType indique quel type de valeur (Auto, Percent ou Points) possède un PreferredWidth donné. Assignez le résultat à Table.PreferredWidth pour l’ensemble du tableau ou à CellFormat.PreferredWidth pour une cellule.


Étape 7 : Fusionner les cellules

Marquez les cellules comme fusionnées en définissant CellFormat.HorizontalMerge ou CellFormat.VerticalMerge (tous deux tapés CellMerge) sur les cellules qui doivent participer à la fusion. Si les cellules n’étaient fusionnées visuellement qu’en faisant correspondre leurs largeurs plutôt qu’en étant explicitement signalées, appelez Table.ConvertToHorizontallyMergedCells() pour convertir cet agencement visuel en cellules avec un véritable état CellMerge. CellVerticalAlignment contrôle la façon dont le contenu est justifié verticalement dans une cellule, indépendamment de toute fusion.


Étape 8 : Lire les tableaux d’un document existant

Pour travailler avec les tableaux déjà présents dans un document chargé, lisez Body.Tables (ou la propriété Tables sur tout autre Story) — un TableCollection — plutôt que de créer de nouveaux. Table.Rows renvoie un RowCollection et Row.Cells renvoie un CellCollection; les trois types de collections prennent en charge Add(), Insert(), Remove(), RemoveAt(), Contains() et IndexOf() pour les modifications programmatiques. Après avoir supprimé des lignes ou des cellules, appelez Table.EnsureMinimum(), Row.EnsureMinimum() ou Cell.EnsureMinimum() afin que le nœud conserve la structure minimale valide attendue par Word — une ligne vide, une cellule vide ou un paragraphe vide, respectivement.

Problèmes courants et solutions

Un document enregistré apparaît malformé, ou une erreur se produit lors de l’enregistrement Une ligne ou le tableau lui-même n’a jamais été fermé. Associez toujours DocumentBuilder.StartTable() avec une balise finale EndTable(), et fermez chaque ligne avec EndRow() avant de passer à la suivante ou de terminer le tableau.

Les nouvelles cellules n’héritent pas du formatage que j’ai défini CellFormat and RowFormat ont été modifiées sur le DocumentBuilder après que les cellules concernées aient déjà été insérées. Définissez DocumentBuilder.CellFormat / RowFormat avant le InsertCell() or EndRow() appel qui crée le contenu que vous souhaitez formater.

Le tableau ne redimensionne pas comme je l’attends après avoir modifié son contenu. Table.AutoFit(AutoFitBehavior) reflète la structure du tableau uniquement au moment où il est appelé. Appelez-le de nouveau après toute modification structurelle — ajout ou suppression de lignes, de cellules ou de contenu — si la mise en page doit être réajustée.

Les cellules qui semblent fusionnées se comportent comme des cellules séparées lors de la lecture. Les cellules n’étaient assorties que par leur largeur, pas marquées avec CellMerge. Appeler Table.ConvertToHorizontallyMergedCells(), ou définir CellFormat.HorizontalMerge / VerticalMerge explicitement sur les cellules qui doivent fusionner.

Supprimer des lignes ou des cellules laisse le tableau dans un état invalide Word attend chaque Table, Row, et Cell de maintenir une structure minimale valide. Après avoir supprimé le contenu de manière programmatique, appeler EnsureMinimum() sur le nœud qui vient d’être modifié.

Foire aux questions

Comment créer un tableau à partir de zéro plutôt que de modifier un tableau existant?

Utilisez DocumentBuilder: appelez StartTable(), puis InsertCell() pour chaque cellule d’une ligne, EndRow() pour fermer la ligne, répétez pour les lignes supplémentaires, et EndTable() pour fermer le tableau.

Comment obtenir les tableaux déjà présents dans un document chargé?

Lisez la propriété Tables (un TableCollection) sur le Body de la section qui vous intéresse, ou sur tout autre Story tel qu’un en-tête ou un pied de page.

Comment définir une table à un pourcentage de la largeur de la page au lieu d’une largeur fixe?

Attribuez Table.PreferredWidth = PreferredWidth.FromPercent(value) plutôt que PreferredWidth.FromPoints(value).

Quelle est la différence entre définir les bordures avec SetBorders et SetBorder?

Table.SetBorders() applique un style de ligne, une épaisseur et une couleur à chaque bordure du tableau en une fois; Table.SetBorder() définit un seul côté, permettant à chaque côté d’avoir un formatage différent.

Comment réinitialiser le formatage d’une cellule ou d’une ligne avant de la réutiliser?

Appelez CellFormat.ClearFormatting() sur le CellFormat de la cellule, ou RowFormat.ClearFormatting() sur le RowFormat de la ligne.

Voir aussi

 Français