Comment travailler avec les tableaux dans .NET

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.


Voir aussi

 Français