Créer un Tableau

Aspose.Words permet aux utilisateurs de créer des tableaux dans un document à partir de zéro et fournit plusieurs méthodes différentes pour le faire. Cet article présente des détails sur la façon d’ajouter des tableaux formatés à votre document en utilisant chaque méthode, ainsi qu’une comparaison de chaque méthode à la fin de l’article.

Styles de Tableau par Défaut

La table nouvellement créée reçoit des valeurs par défaut similaires à celles utilisées dans Microsoft Word:

Propriété de Table Par défaut dans Aspose.Words
Border Style Single
Border Width 1/2 pt
Couleur de la Bordure Black
Left and Right Padding 5.4 pts
AutoFit Mode AutoFit to Window
Allow AutoFit True

Créer une table avec DocumentBuilder

Dans Aspose.Words, les utilisateurs peuvent créer un tableau dans un document à l’aide de DocumentBuilder. L’algorithme de base pour créer une table est le suivant:

  1. Commencez la table avec StartTable
  2. Ajoutez une cellule au tableau en utilisant InsertCell – cela démarre automatiquement une nouvelle ligne
  3. Vous pouvez éventuellement utiliser la propriété CellFormat pour spécifier le formatage des cellules
  4. Insérez le contenu de la cellule à l’aide des méthodes DocumentBuilder appropriées telles que Writeln, InsertImage et autres
  5. Répétez les étapes 2 à 4 jusqu’à ce que la rangée soit terminée
  6. Appelez EndRow pour terminer la ligne en cours
  7. Vous pouvez éventuellement utiliser la propriété RowFormat pour spécifier le formatage des lignes
  8. Répétez les étapes 2 à 7 jusqu’à ce que le tableau soit terminé
  9. Appelez EndTable pour terminer la construction de la table

Le processus de création d’une table peut être clairement vu dans l’image suivante:

creating-table-process

L’exemple de code suivant montre comment créer une table simple en utilisant DocumentBuilder avec une mise en forme par défaut:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Start building the table.
builder.startTable();
builder.insertCell();
builder.write("Row 1, Cell 1 Content.");
// Build the second cell.
builder.insertCell();
builder.write("Row 1, Cell 2 Content.");
// Call the following method to end the row and start a new row.
builder.endRow();
// Build the first cell of the second row.
builder.insertCell();
builder.write("Row 2, Cell 1 Content");
// Build the second cell.
builder.insertCell();
builder.write("Row 2, Cell 2 Content.");
builder.endRow();
// Signal that we have finished building the table.
builder.endTable();
doc.save(getArtifactsDir() + "WorkingWithTables.CreateSimpleTable.docx");

L’exemple de code suivant montre comment créer un tableau formaté à l’aide de DocumentBuilder:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Table table = builder.startTable();
builder.insertCell();
// Table wide formatting must be applied after at least one row is present in the table.
table.setLeftIndent(20.0);
// Set height and define the height rule for the header row.
builder.getRowFormat().setHeight(40.0);
builder.getRowFormat().setHeightRule(HeightRule.AT_LEAST);
builder.getCellFormat().getShading().setBackgroundPatternColor(new Color((198), (217), (241)));
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
builder.getFont().setSize(16.0);
builder.getFont().setName("Arial");
builder.getFont().setBold(true);
builder.getCellFormat().setWidth(100.0);
builder.write("Header Row,\n Cell 1");
// We don't need to specify this cell's width because it's inherited from the previous cell.
builder.insertCell();
builder.write("Header Row,\n Cell 2");
builder.insertCell();
builder.getCellFormat().setWidth(200.0);
builder.write("Header Row,\n Cell 3");
builder.endRow();
builder.getCellFormat().getShading().setBackgroundPatternColor(Color.WHITE);
builder.getCellFormat().setWidth(100.0);
builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
// Reset height and define a different height rule for table body.
builder.getRowFormat().setHeight(30.0);
builder.getRowFormat().setHeightRule(HeightRule.AUTO);
builder.insertCell();
// Reset font formatting.
builder.getFont().setSize(12.0);
builder.getFont().setBold(false);
builder.write("Row 1, Cell 1 Content");
builder.insertCell();
builder.write("Row 1, Cell 2 Content");
builder.insertCell();
builder.getCellFormat().setWidth(200.0);
builder.write("Row 1, Cell 3 Content");
builder.endRow();
builder.insertCell();
builder.getCellFormat().setWidth(100.0);
builder.write("Row 2, Cell 1 Content");
builder.insertCell();
builder.write("Row 2, Cell 2 Content");
builder.insertCell();
builder.getCellFormat().setWidth(200.0);
builder.write("Row 2, Cell 3 Content.");
builder.endRow();
builder.endTable();
doc.save(getArtifactsDir() + "WorkingWithTables.FormattedTable.docx");

L’exemple de code suivant montre comment insérer une table imbriquée à l’aide de DocumentBuilder:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Cell cell = builder.insertCell();
builder.writeln("Outer Table Cell 1");
builder.insertCell();
builder.writeln("Outer Table Cell 2");
// This call is important to create a nested table within the first table.
// Without this call, the cells inserted below will be appended to the outer table.
builder.endTable();
// Move to the first cell of the outer table.
builder.moveTo(cell.getFirstParagraph());
// Build the inner table.
builder.insertCell();
builder.writeln("Inner Table Cell 1");
builder.insertCell();
builder.writeln("Inner Table Cell 2");
builder.endTable();
doc.save(getArtifactsDir() + "WorkingWithTables.NestedTable.docx");

Créer une table via DOM (Modèle d’objet de document)

Vous pouvez insérer des tables directement dans le DOM en ajoutant un nouveau nœud Table à une position spécifique.

Veuillez noter qu’immédiatement après la création du nœud de table, la table elle-même sera complètement vide, c’est-à-dire qu’elle ne contient pas encore de lignes et de cellules. Pour insérer des lignes et des cellules dans un tableau, ajoutez les nœuds enfants Row et Cell appropriés au DOM.

L’exemple de code suivant montre comment créer une nouvelle table à partir de zéro en ajoutant les nœuds enfants appropriés à l’arborescence du document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
// We start by creating the table object. Note that we must pass the document object
// to the constructor of each node. This is because every node we create must belong
// to some document.
Table table = new Table(doc);
doc.getFirstSection().getBody().appendChild(table);
// Here we could call EnsureMinimum to create the rows and cells for us. This method is used
// to ensure that the specified node is valid. In this case, a valid table should have at least one Row and one cell.
// Instead, we will handle creating the row and table ourselves.
// This would be the best way to do this if we were creating a table inside an algorithm.
Row row = new Row(doc);
row.getRowFormat().setAllowBreakAcrossPages(true);
table.appendChild(row);
// We can now apply any auto fit settings.
table.autoFit(AutoFitBehavior.FIXED_COLUMN_WIDTHS);
Cell cell = new Cell(doc);
cell.getCellFormat().getShading().setBackgroundPatternColor(Color.BLUE);
cell.getCellFormat().setWidth(80.0);
cell.appendChild(new Paragraph(doc));
cell.getFirstParagraph().appendChild(new Run(doc, "Row 1, Cell 1 Text"));
row.appendChild(cell);
// We would then repeat the process for the other cells and rows in the table.
// We can also speed things up by cloning existing cells and rows.
row.appendChild(cell.deepClone(false));
row.getLastCell().appendChild(new Paragraph(doc));
row.getLastCell().getFirstParagraph().appendChild(new Run(doc, "Row 1, Cell 2 Text"));
doc.save(getArtifactsDir() + "WorkingWithTables.InsertTableDirectly.docx");

Créer une table à partir de HTML

Aspose.Words prend en charge l’insertion de contenu dans un document à partir d’une source HTML à l’aide de la méthode InsertHtml. L’entrée peut être une page HTML complète ou juste un extrait partiel.

En utilisant cette méthode InsertHtml, les utilisateurs peuvent insérer des tableaux dans le document via des balises de tableau telles que <table>, <tr>, <td>.

L’exemple de code suivant montre comment insérer un tableau dans un document à partir d’une chaîne contenant des balises HTML:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Note that AutoFitSettings does not apply to tables inserted from HTML.
builder.insertHtml("<table>" +
"<tr>" +
"<td>Row 1, Cell 1</td>" +
"<td>Row 1, Cell 2</td>" +
"</tr>" +
"<tr>" +
"<td>Row 2, Cell 2</td>" +
"<td>Row 2, Cell 2</td>" +
"</tr>" +
"</table>");
doc.save(getArtifactsDir() + "WorkingWithTables.InsertTableFromHtml.docx");

Insérer une copie d’une Table existante

Il arrive souvent que vous deviez créer un tableau basé sur un tableau déjà existant dans un document. Le moyen le plus simple de dupliquer une table tout en conservant toute la mise en forme consiste à cloner le nœud de la table à l’aide de la méthode deepClone.

La même technique peut être utilisée pour ajouter des copies d’une ligne ou d’une cellule existante à un tableau.

L’exemple de code suivant montre comment dupliquer une table à l’aide de constructeurs de nœuds:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document(getMyDir() + "Tables.docx");
Table table = (Table) doc.getChild(NodeType.TABLE, 0, true);
// Clone the table and insert it into the document after the original.
Table tableClone = (Table) table.deepClone(true);
table.getParentNode().insertAfter(tableClone, table);
// Insert an empty paragraph between the two tables,
// or else they will be combined into one upon saving this has to do with document validation.
table.getParentNode().insertAfter(new Paragraph(doc), table);
doc.save(getArtifactsDir() + "WorkingWithTables.CloneCompleteTable.docx");

L’exemple de code suivant montre comment cloner la dernière ligne d’une table et l’ajouter à la table:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document(getMyDir() + "Tables.docx");
Table table = (Table) doc.getChild(NodeType.TABLE, 0, true);
Row clonedRow = (Row) table.getLastRow().deepClone(true);
// Remove all content from the cloned row's cells. This makes the row ready for new content to be inserted into.
for (Cell cell : (Iterable<Cell>) clonedRow.getCells())
cell.removeAllChildren();
table.appendChild(clonedRow);
doc.save(getArtifactsDir() + "WorkingWithTables.CloneLastRow.docx");

Si vous envisagez de créer des tableaux dans un document qui augmentent dynamiquement avec chaque enregistrement de votre source de données, la méthode ci-dessus n’est pas conseillée. Au lieu de cela, la sortie souhaitée est plus facilement obtenue en utilisant Mail merge avec des régions. Vous pouvez en apprendre plus sur cette technique dans le Mail Merge avec des régions section.

Comparer les façons de Créer un Tableau

Aspose.Words fournit plusieurs méthodes pour créer de nouvelles tables dans un document. Chaque méthode a ses propres avantages et inconvénients, de sorte que le choix de celle à utiliser dépend souvent de la situation spécifique.

Examinons de plus près ces façons de créer des tableaux et comparons leurs avantages et leurs inconvénients:

Méthode Avantages Inconvénients
Par DocumentBuilder La méthode standard pour insérer des tableaux et d’autres contenus de documents Parfois difficile de créer plusieurs variétés de tables en même temps avec la même instance de constructeur
Par DOM S’intègre mieux avec le code environnant qui crée et insère des nœuds directement dans le DOM sans utiliser de DocumentBuilder La table est créée “vide”: avant d’effectuer la plupart des opérations, vous devez appeler EnsureMinimum pour créer les nœuds enfants manquants
À partir de HTML Peut créer une nouvelle table à partir de la source HTML en utilisant des balises comme <table>, <tr>, <td> Tous les formats de tableau Microsoft Word possibles ne peuvent pas être appliqués à HTML
Clonage d’une table existante Vous pouvez créer une copie d’un tableau existant tout en conservant toutes les mises en forme des lignes et des cellules Les nœuds enfants appropriés doivent être supprimés avant que la table ne soit prête à être utilisée