Zarządzanie tabelami prezentacji w .NET
Wprowadzenie
Tabela w programie PowerPoint to wydajny sposób wyświetlania i prezentacji informacji. Informacje w siatce komórek (układanych w wiersze i kolumny) są proste i łatwe do zrozumienia.
Aspose.Slides udostępnia klasę Table, interfejs ITable, klasę Cell, interfejs ICell oraz inne typy, które pozwalają tworzyć, aktualizować i zarządzać tabelami w prezentacjach.
Utworzenie tabeli od podstaw
- Utwórz instancję klasy Presentation .
- Pobierz odniesienie do slajdu za pośrednictwem jego indeksu.
- Zdefiniuj tablicę
columnWidth. - Zdefiniuj tablicę
rowHeight. - Dodaj obiekt ITable do slajdu przy użyciu metody AddTable .
- Przejdź przez każdy ICell i zastosuj formatowanie krawędzi: górnej, dolnej, prawej i lewej.
- Połącz pierwsze dwie komórki pierwszego wiersza tabeli.
- Uzyskaj dostęp do TextFrame komórki ICell .
- Dodaj tekst do TextFrame .
- Zapisz zmodyfikowaną prezentację.
Ten kod C# pokazuje, jak utworzyć tabelę w prezentacji:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
Presentation pres = new Presentation();
// Uzyskuje dostęp do pierwszego slajdu
ISlide sld = pres.Slides[0];
// Definiuje kolumny o określonych szerokościach oraz wiersze o określonych wysokościach
double[] dblCols = { 50, 50, 50 };
double[] dblRows = { 50, 30, 30, 30, 30 };
// Dodaje kształt tabeli do slajdu
ITable tbl = sld.Shapes.AddTable(100, 50, dblCols, dblRows);
// Ustawia formatowanie krawędzi dla każdej komórki
for (int row = 0; row < tbl.Rows.Count; row++)
{
for (int cell = 0; cell < tbl.Rows[row].Count; cell++)
{
tbl.Rows[row][cell].CellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
tbl.Rows[row][cell].CellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
tbl.Rows[row][cell].CellFormat.BorderTop.Width = 5;
tbl.Rows[row][cell].CellFormat.BorderBottom.FillFormat.FillType = (FillType.Solid);
tbl.Rows[row][cell].CellFormat.BorderBottom.FillFormat.SolidFillColor.Color= Color.Red;
tbl.Rows[row][cell].CellFormat.BorderBottom.Width =5;
tbl.Rows[row][cell].CellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
tbl.Rows[row][cell].CellFormat.BorderLeft.FillFormat.SolidFillColor.Color =Color.Red;
tbl.Rows[row][cell].CellFormat.BorderLeft.Width = 5;
tbl.Rows[row][cell].CellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
tbl.Rows[row][cell].CellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
tbl.Rows[row][cell].CellFormat.BorderRight.Width = 5;
}
}
// Łączy komórki 1 i 2 pierwszego wiersza
tbl.MergeCells(tbl.Rows[0][0], tbl.Rows[0][1], false);
// Dodaje tekst do połączonej komórki
tbl.Rows[0][0].TextFrame.Text = "Merged Cells";
// Zapisuje prezentację na dysku
pres.Save("table.pptx", SaveFormat.Pptx);
Numeracja w standardowej tabeli
W standardowej tabeli numeracja komórek jest prosta i rozpoczyna się od zera. Pierwsza komórka tabeli ma indeks 0,0 (kolumna 0, wiersz 0).
Na przykład, komórki w tabeli o 4 kolumnach i 4 wierszach są numerowane w ten sposób:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Ten kod C# tworzy powyższą standardową tabelę 4 × 4 i ustawia formatowanie krawędzi dla każdej jej komórki:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
using (Presentation pres = new Presentation())
{
// Uzyskuje dostęp do pierwszego slajdu
ISlide sld = pres.Slides[0];
// Definiuje kolumny o określonych szerokościach i wiersze o określonych wysokościach
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// Dodaje kształt tabeli do slajdu
ITable tbl = sld.Shapes.AddTable(100, 50, dblCols, dblRows);
// Ustawia formatowanie krawędzi dla każdej komórki
foreach (IRow row in tbl.Rows)
{
foreach (ICell cell in row)
{
cell.CellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderTop.Width = 5;
cell.CellFormat.BorderBottom.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderBottom.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderBottom.Width = 5;
cell.CellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderLeft.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderLeft.Width = 5;
cell.CellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderRight.Width = 5;
}
}
// Zapisuje prezentację na dysku
pres.Save("StandardTables_out.pptx", SaveFormat.Pptx);
}
Dostęp do istniejącej tabeli
-
Utwórz instancję klasy Presentation .
-
Pobierz odniesienie do slajdu zawierającego tabelę za pośrednictwem jego indeksu.
-
Utwórz obiekt ITable i ustaw go na null.
-
Przejdź przez wszystkie obiekty IShape aż zostanie znaleziona tabela.
Jeśli podejrzewasz, że rozpatrywany slajd zawiera jedną tabelę, możesz po prostu sprawdzić wszystkie znajdujące się na nim kształty. Gdy kształt zostanie rozpoznany jako tabela, możesz rzutować go na obiekt Table . Jeśli natomiast slajd zawiera kilka tabel, lepiej szukać potrzebnej tabeli po jej AlternativeText .
-
Użyj obiektu ITable do pracy z tabelą. W poniższym przykładzie dodaliśmy nowy wiersz do tabeli.
-
Zapisz zmodyfikowaną prezentację.
Ten kod C# pokazuje, jak uzyskać dostęp i pracować z istniejącą tabelą:
using Aspose.Slides;
// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
using (Presentation pres = new Presentation("UpdateExistingTable.pptx"))
{
// Uzyskuje dostęp do pierwszego slajdu
ISlide sld = pres.Slides[0];
// Inicjalizuje zmienną TableEx jako null
ITable tbl = null;
// Iteruje po kształtach i ustawia referencję do odnalezionej tabeli
foreach (IShape shp in sld.Shapes)
if (shp is ITable)
tbl = (ITable)shp;
// Ustawia tekst dla pierwszej kolumny drugiego wiersza
tbl[0, 1].TextFrame.Text = "New";
// Zapisuje zmodyfikowaną prezentację na dysk
pres.Save("table1_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Znajdź komórkę, której własnością jest ramka tekstowa
Gdy ogólny kod przetwarzania tekstu otrzyma obiekt ITextFrame z tabeli, użyj właściwości ITextFrame.ParentCell aby pobrać należącą do niej ICell . Dla ramki tekstowej w komórce tabeli, ITextFrame.ParentCell jest ustawiona, a ITextFrame.ParentShape ma wartość null, mimo że sama tabela jest kształtem.
Współrzędne komórki są dostępne za pośrednictwem właściwości tylko do odczytu ICell.FirstColumnIndex i ICell.FirstRowIndex . ITextFrame.ParentCell jest również tylko do odczytu: umożliwia nawigację do właściciela, ale nie zmienia własności. Zawsze sprawdzaj, czy zwrócona komórka nie jest null przed jej użyciem.
Pełny przykład identyfikujący właścicieli komórek tabeli i kształtów, w tym kształty powiązane z węzłami SmartArt, znajduje się w artykule Search and Replace Text .
Wyrównanie tekstu w tabeli
- Utwórz instancję klasy Presentation .
- Pobierz odniesienie do slajdu za pośrednictwem jego indeksu.
- Dodaj obiekt ITable do slajdu.
- Uzyskaj dostęp do obiektu ITextFrame z tabeli.
- Uzyskaj dostęp do IParagraph w ramach ITextFrame .
- Wyrównaj tekst w pionie.
- Zapisz zmodyfikowaną prezentację.
Ten kod C# pokazuje, jak wyrównać tekst w tabeli:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
// Tworzy instancję klasy Presentation
Presentation presentation = new Presentation();
// Pobiera pierwszy slajd
ISlide slide = presentation.Slides[0];
// Definiuje kolumny o określonych szerokościach i wiersze o określonych wysokościach
double[] dblCols = { 120, 120, 120, 120 };
double[] dblRows = { 100, 100, 100, 100 };
// Dodaje kształt tabeli do slajdu
ITable tbl = slide.Shapes.AddTable(100, 50, dblCols, dblRows);
tbl[1, 0].TextFrame.Text = "10";
tbl[2, 0].TextFrame.Text = "20";
tbl[3, 0].TextFrame.Text = "30";
// Uzyskuje dostęp do ramki tekstowej
ITextFrame txtFrame = tbl[0, 0].TextFrame;
// Tworzy obiekt Paragraph dla ramki tekstowej
IParagraph paragraph = txtFrame.Paragraphs[0];
// Tworzy obiekt Portion dla akapitu
IPortion portion = paragraph.Portions[0];
portion.Text = "Text here";
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
// Wyrównuje tekst pionowo
ICell cell = tbl[0, 0];
cell.TextAnchorType = TextAnchorType.Center;
cell.TextVerticalType = TextVerticalType.Vertical270;
// Zapisuje prezentację na dysk
presentation.Save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
Ustaw formatowanie tekstu na poziomie tabeli
- Utwórz instancję klasy Presentation .
- Pobierz odniesienie do slajdu za pośrednictwem jego indeksu.
- Uzyskaj dostęp do obiektu ITable ze slajdu.
- Ustaw FontHeight dla tekstu.
- Ustaw Alignment i MarginRight .
- Ustaw TextVerticalType .
- Zapisz zmodyfikowaną prezentację.
Ten kod C# pokazuje, jak zastosować wybrane opcje formatowania do tekstu w tabeli:
using Aspose.Slides;
// Tworzy instancję klasy Presentation
Presentation presentation = new Presentation();
ISlide slide = presentation.Slides[0];
ITable someTable = presentation.Slides[0].Shapes[0] as ITable; // Załóżmy, że pierwszy kształt na pierwszym slajdzie jest tabelą
// Ustawia wysokość czcionki komórek tabeli
PortionFormat portionFormat = new PortionFormat();
portionFormat.FontHeight = 25;
someTable.SetTextFormat(portionFormat);
// Ustawia wyrównanie tekstu komórek tabeli i prawy margines w jednym wywołaniu
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.Alignment = TextAlignment.Right;
paragraphFormat.MarginRight = 20;
someTable.SetTextFormat(paragraphFormat);
// Ustawia typ pionowego rozmieszczenia tekstu w komórkach tabeli
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.TextVerticalType = TextVerticalType.Vertical;
someTable.SetTextFormat(textFrameFormat);
presentation.Save("result.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
Pobierz właściwości stylu tabeli
Aspose.Slides umożliwia pobranie właściwości stylu tabeli, aby można je było użyć w innej tabeli lub w innym miejscu. Ten kod C# pokazuje, jak uzyskać właściwości stylu z gotowego stylu tabeli:
using Aspose.Slides;
using Aspose.Slides.Export;
using (Presentation pres = new Presentation())
{
ITable table = pres.Slides[0].Shapes.AddTable(10, 10, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
table.StylePreset = TableStylePreset.DarkStyle1; // zmień domyślny preset stylu
// Pobierz preset stylu tabeli.
TableStylePreset stylePreset = table.StylePreset;
Console.WriteLine($"Table style preset: {stylePreset}");
// Zastosuj pobrany preset stylu do innej tabeli.
ITable anotherTable = pres.Slides[0].Shapes.AddTable(10, 100, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
anotherTable.StylePreset = stylePreset;
pres.Save("table.pptx", SaveFormat.Pptx);
}
Zablokuj proporcje tabeli
Proporcje geometrycznego kształtu to stosunek jego wymiarów w różnych osiach. Aspose.Slides udostępnia właściwość AspectRatioLocked, aby pozwolić zablokować ustawienie proporcji dla tabel i innych kształtów.
Ten kod C# pokazuje, jak zablokować proporcje tabeli:
using Aspose.Slides;
using Aspose.Slides.Export;
using (Presentation pres = new Presentation("pres.pptx"))
{
ITable table = (ITable)pres.Slides[0].Shapes[0];
Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");
table.ShapeLock.AspectRatioLocked = !table.ShapeLock.AspectRatioLocked; // odwróć
Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");
pres.Save("pres-out.pptx", SaveFormat.Pptx);
}
FAQ
Czy mogę włączyć kierunek czytania od prawej do lewej (RTL) dla całej tabeli i tekstu w jej komórkach?
Tak. Tabela udostępnia właściwość RightToLeft, a akapity mają ParagraphFormat.RightToLeft. Użycie obu zapewnia prawidłowy porządek RTL oraz renderowanie w komórkach.
Jak zapobiec przemieszczeniu lub zmianie rozmiaru tabeli przez użytkowników w ostatecznym pliku?
Użyj shape locks, aby wyłączyć przemieszczanie, zmianę rozmiaru, zaznaczanie itp. Te blokady dotyczą także tabel.
Czy wstawianie obrazu jako tła w komórce jest obsługiwane?
Tak. Można ustawić picture fill dla komórki; obraz pokryje obszar komórki zgodnie z wybranym trybem (rozciąganie lub kafelkowanie).