Come lavorare con le tabelle in .NET
Aspose.Slides FOSS per .NET supporta la creazione di tabelle nelle diapositive con larghezze di colonna e altezze di riga configurabili. Questa guida mostra come aggiungere una tabella, popolarla con i dati e applicare una formattazione di base del testo alle celle.
Guida passo-passo
Passo 1: Installa il pacchetto
dotnet add package Aspose.Slides.FossPasso 2: Crea o apri una presentazione
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);Passo 3: Definisci larghezze delle colonne e altezze delle righe
Le tabelle richiedono larghezze di colonna e altezze di riga esplicite in punti (1 punto = 1/72 di pollice). Una diapositiva standard è larga 720 punti e alta 540 punti.
var colWidths = new double[] { 200.0, 150.0, 150.0 }; // 3 columns
var rowHeights = new double[] { 45.0, 40.0, 40.0 }; // 3 rowsPasso 4: Aggiungi la tabella
slide.Shapes.AddTable(x, y, columnWidths, rowHeights) crea la tabella nella posizione (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);Passo 5: Imposta il testo della cella
Accedi alle celle tramite table.Rows[rowIndex][colIndex] e assegna il testo tramite .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);Passo 6: Formattare il testo della cella di intestazione
Applica la formattazione in grassetto alle celle dell’intestazione usando 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);
}
}Esempio completo funzionante
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");Problemi comuni e soluzioni
IndexOutOfRangeException quando si accede a table.Rows[row][col]
Gli indici di riga e colonna sono basati su zero. Se hai definito rowHeights con 3 elementi, gli indici di riga validi sono 0, 1, 2.
Il testo della cella non appare nel file salvato
Assegna sempre tramite .TextFrame.Text, non tramite .Text direttamente sull’oggetto cella:
// Correct
table.Rows[0][0].TextFrame.Text = "Header";
// Wrong: will not compile or silent failure
// table.Rows[0][0].Text = "Header";La posizione della tabella è fuori dalla diapositiva
Verifica che x + sum(colWidths) <= 720 e y + sum(rowHeights) <= 540 siano presenti per una diapositiva standard.
Domande Frequenti
Posso unire le celle della tabella?
Sì. Usa Table.MergeCells(ICell cell1, ICell cell2, bool allowSplitting) per unire due celle adiacenti. Imposta allowSplitting su false per impedire che la cella unita venga divisa nuovamente. Esempio:
// 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);Posso applicare un colore di sfondo a tutta la tabella?
Applica la formattazione di riempimento a ciascuna cella individuale:
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);
}Posso impostare gli stili del bordo della cella?
Le proprietà del bordo della cella sono accessibili tramite le proprietà cell.CellFormat.BorderLeft, BorderTop, BorderRight e BorderBottom. Consulta il riferimento API per l’elenco completo degli attributi di formato del bordo.