Správa tabulek prezentace v .NET

Úvod

Tabulky v PowerPointu uspořádávají informace do řádků a sloupců, což usnadňuje čtení a porovnávání hodnot.

Aspose.Slides poskytuje třídu Table, rozhraní ITable, třídu Cell, rozhraní ICell a další typy, které vám umožní vytvářet, aktualizovat a spravovat tabulky v prezentacích.

Vytvoření tabulky od nuly

Vytvořte tabulku zadáním její pozice, šířek sloupců a výšek řádků. Po přidání na snímek můžete formátovat okraje buněk, slučovat buňky a vkládat text.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Definujte pole šířek sloupců v bodech.
  4. Definujte pole výšek řádků v bodech.
  5. Přidejte objekt ITable na snímek pomocí metody AddTable.
  6. Procházejte každé ICell a použijte formátování horního, dolního, pravého a levého okraje.
  7. Sloučte první dvě buňky v první řadě tabulky.
  8. Přistupte ke sloučené buňce přes její vlastnost TextFrame.
  9. Nastavte text ve sloučené buňce.
  10. Uložte upravenou prezentaci.

Níže uvedený příklad vytvoří tabulku se třemi sloupci a pěti řádky v bodovém umístění (100, 50). Použije červené okraje o šířce 5 bodů, sloučí první dvě buňky v první řadě a výsledek uloží jako table.pptx.

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 50, 50, 50 };
var rowHeights = new double[] { 50, 30, 30, 30, 30 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);

foreach (var row in table.Rows)
{
    foreach (var cell in row)
    {
        var cellFormat = cell.CellFormat;
        cellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderTop.Width = 5;

        cellFormat.BorderBottom.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderBottom.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderBottom.Width = 5;

        cellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderLeft.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderLeft.Width = 5;

        cellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderRight.Width = 5;
    }
}

table.MergeCells(table[0, 0], table[1, 0], false);
table[0, 0].TextFrame.Text = "Merged Cells";

presentation.Save("table.pptx", SaveFormat.Pptx);

Číslování ve standardní tabulce

Ve standardní tabulce jsou indexy buněk nulové a používají pořadí (sloupec, řádek). První buňka má index (0, 0).

Například buňky v tabulce se 4 sloupci a 4 řádky jsou očíslovány takto:

(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)

Tento příklad vytvoří výše ilustrovanou tabulku 4 × 4, se šířkami sloupců a výškami řádků 70 bodů a červenými okraji buněk o šířce 5 bodů. Souřadnice ukazují indexy buněk; příklad ponechá buňky prázdné a uloží tabulku jako StandardTables_out.pptx.

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 70, 70, 70, 70 };
var rowHeights = new double[] { 70, 70, 70, 70 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);

foreach (var row in table.Rows)
{
    foreach (var cell in row)
    {
        var cellFormat = cell.CellFormat;
        cellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderTop.Width = 5;

        cellFormat.BorderBottom.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderBottom.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderBottom.Width = 5;

        cellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderLeft.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderLeft.Width = 5;

        cellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderRight.Width = 5;
    }
}

presentation.Save("StandardTables_out.pptx", SaveFormat.Pptx);

Přístup k existující tabulce

Tabulky jsou uloženy v kolekci tvarů snímku. Procházejte tvary a najděte tabulku, poté použijte rozhraní ITable pro čtení nebo aktualizaci jejích buněk.

  1. Načtěte prezentaci pomocí třídy Presentation.
  2. Získejte odkaz na snímek obsahující tabulku podle jeho indexu.
  3. Procházejte objekty IShape a zastavte se, když najdete tabulku. Pokud snímek obsahuje několik tabulek, použijte AlternativeText k identifikaci požadované tabulky.
  4. Aktualizujte text v cílové buňce.
  5. Uložte upravenou prezentaci.

Níže uvedený příklad otevře UpdateExistingTable.pptx a najde první tabulku na prvním snímku. Nastaví buňku ve sloupci 0, řádku 1 na hodnotu New a výsledek uloží jako table1_out.pptx. Vstup musí obsahovat alespoň jeden snímek a první tabulka na tomto snímku musí mít alespoň jeden sloupec a dva řádky.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("UpdateExistingTable.pptx");
var slide = presentation.Slides[0];
ITable? table = null;

foreach (var shape in slide.Shapes)
{
    if (shape is ITable candidateTable)
    {
        table = candidateTable;
        break;
    }
}

table![0, 1].TextFrame.Text = "New";

presentation.Save("table1_out.pptx", SaveFormat.Pptx);

Pro změnu výšky řádku v existující tabulce a pochopení, proč její skutečná výška může překročit požadovanou minimální, viz Control Row Height.

Nalezení buňky, která vlastní textový rámec

Když obecný kód pro zpracování textu obdrží objekt ITextFrame z tabulky, použijte vlastnost ITextFrame.ParentCell k získání vlastníka – objektu ICell. Pro textový rámec buňky tabulky je ITextFrame.ParentCell nastaven a ITextFrame.ParentShape je null, i když samotná tabulka je tvarem.

Souřadnice buňky jsou dostupné přes jen pro čtení vlastnosti ICell.FirstColumnIndex a ICell.FirstRowIndex. Vlastnost ITextFrame.ParentCell je také jen pro čtení: umožňuje navigaci k vlastníkovi, ale nemění vlastnictví. Vždy před použitím zkontrolujte, zda vrácená buňka není null.

Kompletní příklad, který identifikuje vlastníky buněk tabulky a tvarů, včetně tvarů spojených s uzly SmartArt, naleznete v Search and Replace Text.

Zarovnání textu v tabulce

Můžete řídit vertikální ukotvení a směr textu jednotlivých buněk tabulky. Příklad v této sekci zarovná text ve první buňce na střed a otočí jej o 270 stupňů.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Přidejte objekt ITable na snímek.
  4. Získejte objekt ITextFrame z tabulky.
  5. Přistupte k prvnímu IParagraph a nastavte jeho text a barvu.
  6. Nastavte buňce TextAnchorType a TextVerticalType.
  7. Uložte upravenou prezentaci.

Tento příklad vytvoří tabulku 4 × 4 se šířkami sloupců 120 bodů a výškami řádků 100 bodů. Formátuje text v buňce (0, 0), přidá hodnoty do zbývajících buněk v první řadě a výsledek uloží jako Vertical_Align_Text_out.pptx.

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 120, 120, 120, 120 };
var rowHeights = new double[] { 100, 100, 100, 100 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);
table[1, 0].TextFrame.Text = "10";
table[2, 0].TextFrame.Text = "20";
table[3, 0].TextFrame.Text = "30";

var cell = table[0, 0];
var paragraph = cell.TextFrame.Paragraphs[0];
var portion = paragraph.Portions[0];
portion.Text = "Text here";
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;

cell.TextAnchorType = TextAnchorType.Center;
cell.TextVerticalType = TextVerticalType.Vertical270;

presentation.Save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);

Nastavení formátování textu na úrovni tabulky

Použijte SetTextFormat k aplikaci formátování textu na všechny buňky v tabulce. Jeho přetížení přijímají formátování částí, odstavců i textových rámců, takže můžete nastavit tyto vlastnosti bez iterace přes jednotlivé buňky.

  1. Načtěte prezentaci pomocí třídy Presentation.
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Získejte objekt ITable ze snímku.
  4. Nastavte FontHeight pro text.
  5. Nastavte Alignment a MarginRight.
  6. Nastavte TextVerticalType.
  7. Uložte upravenou prezentaci.

Níže uvedený příklad otevře table.pptx, který musí obsahovat alespoň jeden snímek s tabulkou jako jejím prvním tvarem. Nastaví velikost písma na 25 bodů, zarovná odstavce vpravo s pravým okrajem 20 bodů a text nastaví vertikální. Formátovaná prezentace se uloží jako result.pptx.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("table.pptx");
var slide = presentation.Slides[0];

var table = (ITable)slide.Shapes[0];

var portionFormat = new PortionFormat();
portionFormat.FontHeight = 25;
table.SetTextFormat(portionFormat);

var paragraphFormat = new ParagraphFormat();
paragraphFormat.Alignment = TextAlignment.Right;
paragraphFormat.MarginRight = 20;
table.SetTextFormat(paragraphFormat);

var textFrameFormat = new TextFrameFormat();
textFrameFormat.TextVerticalType = TextVerticalType.Vertical;
table.SetTextFormat(textFrameFormat);

presentation.Save("result.pptx", SaveFormat.Pptx);

Získání vlastností stylu tabulky

Použijte StylePreset k načtení nebo přiřazení předdefinovaného stylu tabulky. Tento příklad použije TableStylePreset.DarkStyle1 na jedné tabulce, vytiskne název presetu a přiřadí stejný preset druhé tabulce. Obě tabulky jsou uloženy v table-style.pptx.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 100, 150 };
var rowHeights = new double[] { 5, 5, 5 };
var table = slide.Shapes.AddTable(10, 10, columnWidths, rowHeights);
table.StylePreset = TableStylePreset.DarkStyle1;

var stylePreset = table.StylePreset;
Console.WriteLine($"Table style preset: {stylePreset}");

var anotherTable = slide.Shapes.AddTable(10, 100, columnWidths, rowHeights);
anotherTable.StylePreset = stylePreset;

presentation.Save("table-style.pptx", SaveFormat.Pptx);

Uzamčení poměru stran tabulky

Poměr stran tabulky je poměr její šířky k výšce. Použijte AspectRatioLocked k uzamčení tohoto poměru pro tabulku.

Níže uvedený příklad otevře pres.pptx, který musí obsahovat alespoň jeden snímek s tabulkou jako jejím prvním tvarem. Vytiskne aktuální stav uzamčení, aktivuje uzamčení poměru stran, vytiskne aktualizovaný stav (True) a výsledek uloží jako pres-out.pptx.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("pres.pptx");
var slide = presentation.Slides[0];

var table = (ITable)slide.Shapes[0];

Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");

table.ShapeLock.AspectRatioLocked = true;
Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");

presentation.Save("pres-out.pptx", SaveFormat.Pptx);

Často kladené otázky

Mohu povolit směr čtení zprava doleva (RTL) pro celou tabulku a text v jejích buňkách?

Ano. Tabulka má vlastnost RightToLeft a odstavce mají ParagraphFormat.RightToLeft. Použití obou zajišťuje správné RTL pořadí a vykreslení uvnitř buněk.

Jak mohu zabránit uživatelům přesouvat nebo měnit velikost tabulky v konečném souboru?

Použijte shape locks k zakázání přesunu, změny velikosti, výběru atd. Tyto zámky platí i pro tabulky.

Je podporováno vložení obrázku jako pozadí buňky?

Ano. Můžete nastavit picture fill pro buňku; obrázek pokryje oblast buňky podle zvoleného režimu (roztažení nebo dlaždice).