Comment travailler avec les tableaux dans .NET
Aspose.Slides FOSS for .NET prend en charge la création de tableaux sur les diapositives avec des largeurs de colonnes et des hauteurs de lignes configurables. Ce guide montre comment ajouter un tableau, le remplir avec des données et appliquer une mise en forme de texte de base aux cellules.
Guide étape par étape
Étape 1 : Installer le package
dotnet add package Aspose.Slides.FossÉtape 2 : créer ou ouvrir une présentation
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var slide = prs.Slides[0];
// ... add table ...
prs.Save("table.pptx", SaveFormat.Pptx);Étape 3 : Définir les largeurs de colonne et les hauteurs de ligne
Les tableaux nécessitent des largeurs de colonnes et des hauteurs de lignes explicites en points (1 point = 1/72 pouce). Une diapositive standard mesure 720 points de large et 540 points de haut.
var colWidths = new double[] { 200.0, 150.0, 150.0 }; // 3 columns
var rowHeights = new double[] { 45.0, 40.0, 40.0 }; // 3 rowsÉtape 4 : Ajouter le tableau
slide.Shapes.AddTable(x, y, columnWidths, rowHeights) crée le tableau à la position (x, y):
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var slide = prs.Slides[0];
var colWidths = new double[] { 200.0, 150.0, 150.0 };
var rowHeights = new double[] { 45.0, 40.0, 40.0 };
var table = slide.Shapes.AddTable(50, 100, colWidths, rowHeights);
prs.Save("table.pptx", SaveFormat.Pptx);Étape 5 : Définir le texte de la cellule
Accédez aux cellules via table.Rows[rowIndex][colIndex] et attribuez du texte via .TextFrame.Text:
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var slide = prs.Slides[0];
var colWidths = new double[] { 200.0, 150.0, 150.0 };
var rowHeights = new double[] { 45.0, 40.0, 40.0 };
var table = slide.Shapes.AddTable(50, 100, colWidths, rowHeights);
// Header row (row 0)
string[] headers = { "Product", "Units Sold", "Revenue" };
for (int col = 0; col < headers.Length; col++)
table.Rows[0][col].TextFrame.Text = headers[col];
// Data rows
string[][] data = {
new[] { "Widget A", "1,200", "$24,000" },
new[] { "Widget B", "850", "$17,000" },
};
for (int rowIdx = 0; rowIdx < data.Length; rowIdx++)
for (int col = 0; col < data[rowIdx].Length; col++)
table.Rows[rowIdx + 1][col].TextFrame.Text = data[rowIdx][col];
prs.Save("sales-table.pptx", SaveFormat.Pptx);Étape 6 : Formater le texte de la cellule d’en-tête
Appliquer le format gras aux cellules d’en-tête en utilisant PortionFormat :
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
for (int col = 0; col < headers.Length; col++)
{
var cell = table.Rows[0][col];
var portions = cell.TextFrame.Paragraphs[0].Portions;
if (portions.Count > 0)
{
var fmt = portions[0].PortionFormat;
fmt.FontBold = NullableBool.True;
fmt.FillFormat.FillType = FillType.Solid;
fmt.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 255, 255, 255);
}
}Exemple complet fonctionnel
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;
string[][] dataRows = {
new[] { "North", "$1.2M", "+8%" },
new[] { "South", "$0.9M", "+4%" },
new[] { "East", "$1.5M", "+12%" },
new[] { "West", "$0.7M", "+2%" },
};
string[] headers = { "Region", "Revenue", "Growth" };
using var prs = new Presentation();
var slide = prs.Slides[0];
var colWidths = new double[] { 180.0, 140.0, 120.0 };
var rowHeights = new double[dataRows.Length + 1];
rowHeights[0] = 45.0;
for (int i = 1; i < rowHeights.Length; i++) rowHeights[i] = 38.0;
var table = slide.Shapes.AddTable(60, 80, colWidths, rowHeights);
// Header row
for (int col = 0; col < headers.Length; col++)
{
var cell = table.Rows[0][col];
cell.TextFrame.Text = headers[col];
if (cell.TextFrame.Paragraphs[0].Portions.Count > 0)
{
var fmt = cell.TextFrame.Paragraphs[0].Portions[0].PortionFormat;
fmt.FontBold = NullableBool.True;
}
}
// Data rows
for (int rowIdx = 0; rowIdx < dataRows.Length; rowIdx++)
for (int col = 0; col < dataRows[rowIdx].Length; col++)
table.Rows[rowIdx + 1][col].TextFrame.Text = dataRows[rowIdx][col];
prs.Save("regional-revenue.pptx", SaveFormat.Pptx);
Console.WriteLine("Saved regional-revenue.pptx");Problèmes courants et solutions
IndexOutOfRangeException lors de l’accès à table.Rows[row][col]
Les indices de ligne et de colonne commencent à zéro. Si vous avez défini rowHeights avec 3 éléments, les indices de ligne valides sont 0, 1, 2.
Le texte de la cellule n’apparaît pas dans le fichier enregistré
Attribuez toujours via .TextFrame.Text, et non directement via .Text sur l’objet cellule :
// Correct
table.Rows[0][0].TextFrame.Text = "Header";
// Wrong: will not compile or silent failure
// table.Rows[0][0].Text = "Header";La position du tableau est hors de la diapositive
Vérifiez que x + sum(colWidths) <= 720 et y + sum(rowHeights) <= 540 sont présents pour une diapositive standard.
Foire aux questions
Puis-je fusionner des cellules de tableau ?
Oui. Utilisez Table.MergeCells(ICell cell1, ICell cell2, bool allowSplitting) pour fusionner deux cellules adjacentes. Réglez allowSplitting sur false pour empêcher que la cellule fusionnée ne soit à nouveau séparée. Exemple :
// Merge cell (row 0, col 0) with cell (row 0, col 1)
var cell1 = table.Rows[0][0];
var cell2 = table.Rows[0][1];
table.MergeCells(cell1, cell2, false);Puis-je appliquer une couleur d’arrière-plan à l’ensemble du tableau ?
Appliquer le format de remplissage à chaque cellule individuelle :
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
for (int row = 0; row < table.Rows.Count; row++)
for (int col = 0; col < table.Rows[row].Count; col++)
{
var cell = table.Rows[row][col];
cell.CellFormat.FillFormat.FillType = FillType.Solid;
cell.CellFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 240, 248, 255);
}Puis-je définir les styles de bordure de cellule ?
Les propriétés de bordure de cellule sont accessibles via les propriétés cell.CellFormat.BorderLeft, BorderTop, BorderRight et BorderBottom. Consultez la référence API pour la liste complète des attributs de format de bordure.