Správa tabulek prezentací v .NET

Úvod

Tabulka v PowerPointu je efektivní způsob, jak zobrazit a vyjádřit informace. Informace v mřížce buněk (uspořádaných do řádků a sloupců) jsou přehledné a snadno pochopitelné.

Aspose.Slides poskytuje třídu Tabulka , rozhraní ITable , třídu Buňka , rozhraní ICell a další typy, které vám umožní vytvářet, aktualizovat a spravovat tabulky ve všech druzích prezentací.

Vytvoření tabulky od nuly

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek přes jeho index.
  3. Definujte pole columnWidth.
  4. Definujte pole rowHeight.
  5. Přidejte objekt ITable na snímek pomocí metody AddTable.
  6. Projděte každou ICell a aplikujte formátování na horní, dolní, pravý a levý okraj.
  7. Sloučte první dvě buňky prvního řádku tabulky.
  8. Získejte TextFrame buňky ICell.
  9. Přidejte do TextFrame nějaký text.
  10. Uložte upravenou prezentaci.

Tento C# kód ukazuje, jak vytvořit tabulku v prezentaci:

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

// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();

// Accesses the first slide
ISlide sld = pres.Slides[0];

// Defines columns with widths and rows with heights
double[] dblCols = { 50, 50, 50 };
double[] dblRows = { 50, 30, 30, 30, 30 };

// Adds a table shape to the slide
ITable tbl = sld.Shapes.AddTable(100, 50, dblCols, dblRows);

// Sets the border format for each cell
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;
	}
}
// Sloučí buňky 1 a 2 v řádku 1
tbl.MergeCells(tbl.Rows[0][0], tbl.Rows[0][1], false);

// Přidá text do sloučené buňky
tbl.Rows[0][0].TextFrame.Text = "Merged Cells";

// Uloží prezentaci na disk
pres.Save("table.pptx", SaveFormat.Pptx);

Číslování ve standardní tabulce

Ve standardní tabulce je číslování buněk jednoduché a začíná od nuly. První buňka v tabulce má index 0,0 (sloupec 0, řádek 0).

Například buňky v tabulce se 4 sloupci a 4 řádky jsou čí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 C# kód vytvoří výše číslovanou standardní tabulku 4 × 4 a nastaví formát okrajů pro každou její buňku:

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

// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
using (Presentation pres = new Presentation())
{

    // Získá první snímek
    ISlide sld = pres.Slides[0];

    // Definuje sloupce s šířkami a řádky s výškami
    double[] dblCols = { 70, 70, 70, 70 };
    double[] dblRows = { 70, 70, 70, 70 };

    // Přidá tvar tabulky na snímek
    ITable tbl = sld.Shapes.AddTable(100, 50, dblCols, dblRows);

    // Nastaví formát okraje pro každou buňku
    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;
        }
    }

    // Uloží prezentaci na disk
    pres.Save("StandardTables_out.pptx", SaveFormat.Pptx);
}

Přístup k existující tabulce

  1. Vytvořte instanci třídy Presentation.

  2. Získejte referenci na snímek obsahující tabulku přes jeho index.

  3. Vytvořte objekt ITable a přiřaďte mu hodnotu null.

  4. Procházejte všechny objekty IShape až do nalezení tabulky.

    Pokud předpokládáte, že snímek, se kterým pracujete, obsahuje jedinou tabulku, můžete jednoduše prověřit všechny tvary, které obsahuje. Když je tvar identifikován jako tabulka, můžete jej přetypovat na objekt Tabulka. Pokud však snímek obsahuje několik tabulek, je lepší hledat požadovanou tabulku pomocí jejího AlternativeText.

  5. Použijte objekt ITable k práci s tabulkou. V níže uvedeném příkladu jsme přidali nový řádek do tabulky.

  6. Uložte upravenou prezentaci.

Tento C# kód ukazuje, jak získat přístup k existující tabulce a s ní pracovat:

using Aspose.Slides;

// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
using (Presentation pres = new Presentation("UpdateExistingTable.pptx"))
{

    // Získá první snímek
    ISlide sld = pres.Slides[0];

    // Inicializuje nulovou proměnnou TableEx
    ITable tbl = null;

    // Prochází tvary a nastaví referenci na nalezenou tabulku
    foreach (IShape shp in sld.Shapes)
        if (shp is ITable)
            tbl = (ITable)shp;

    // Nastaví text pro první sloupec druhého řádku
    tbl[0, 1].TextFrame.Text = "New";

    // Uloží upravenou prezentaci na disk
    pres.Save("table1_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}

Najít buňku, která vlastní textový rámec

Když obecný kód pro zpracování textu získá objekt ITextFrame z tabulky, použijte vlastnost ITextFrame.ParentCell k získání vlastní ICell. U textového rámce buňky tabulky je ITextFrame.ParentCell nastaven a ITextFrame.ParentShape je null, i když samotná tabulka je tvar.

Souřadnice buňky jsou dostupné přes jen ke čtení vlastnosti ICell.FirstColumnIndex a ICell.FirstRowIndex. ITextFrame.ParentCell je také jen ke čtení: poskytuje 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 buňky tabulky i tvaru, včetně tvarů spojených s uzly SmartArt, najdete v Search and Replace Text.

Zarovnání textu v tabulce

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek přes jeho index.
  3. Přidejte objekt ITable na snímek.
  4. Získejte objekt ITextFrame z tabulky.
  5. Získejte IParagraph z ITextFrame.
  6. Zarovnejte text vertikálně.
  7. Uložte upravenou prezentaci.

Tento C# kód ukazuje, jak zarovnat text v tabulce:

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

// Vytvoří instanci třídy Presentation
Presentation presentation = new Presentation();

// Získá první snímek
ISlide slide = presentation.Slides[0];

// Definuje sloupce s šířkami a řádky s výškami
double[] dblCols = { 120, 120, 120, 120 };
double[] dblRows = { 100, 100, 100, 100 };

// Přidá tvar tabulky na snímek
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";

// Získá textový rámec
ITextFrame txtFrame = tbl[0, 0].TextFrame;

// Vytvoří objekt Paragraph pro textový rámec
IParagraph paragraph = txtFrame.Paragraphs[0];

// Vytvoří objekt Portion pro odstavec
IPortion portion = paragraph.Portions[0];
portion.Text = "Text here";
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;

// Zarovná text vertikálně
ICell cell = tbl[0, 0];
cell.TextAnchorType = TextAnchorType.Center;
cell.TextVerticalType = TextVerticalType.Vertical270;

// Uloží prezentaci na disk
presentation.Save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);

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

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek přes jeho index.
  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.

Tento C# kód ukazuje, jak aplikovat požadované možnosti formátování na text v tabulce:

using Aspose.Slides;

// Vytvoří instanci třídy Presentation
Presentation presentation = new Presentation();
ISlide slide = presentation.Slides[0];

ITable someTable = presentation.Slides[0].Shapes[0] as ITable; // Předpokládejme, že první tvar na prvním snímku je tabulka

// Nastaví výšku písma buněk tabulky
PortionFormat portionFormat = new PortionFormat();
portionFormat.FontHeight = 25;
someTable.SetTextFormat(portionFormat);

// Nastaví zarovnání textu buněk tabulky a pravý okraj v jednom volání
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.Alignment = TextAlignment.Right;
paragraphFormat.MarginRight = 20;
someTable.SetTextFormat(paragraphFormat);

// Nastaví vertikální typ textu buněk tabulky
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.TextVerticalType = TextVerticalType.Vertical;
someTable.SetTextFormat(textFrameFormat);


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

Získání vlastností stylu tabulky

Aspose.Slides vám umožňuje načíst vlastnosti stylu tabulky, abyste je mohli použít pro jinou tabulku nebo jinde. Tento C# kód ukazuje, jak získat vlastnosti stylu z předdefinovaného stylu tabulky:

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; // změnit výchozí motiv předvolby stylu 

    // Získat předvolbu stylu tabulky.
    TableStylePreset stylePreset = table.StylePreset;
    Console.WriteLine($"Table style preset: {stylePreset}");

    // Použít získanou předvolbu stylu na jinou tabulku.
    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);
}

Uzamčení poměru stran tabulky

Poměr stran geometrického tvaru je poměr jeho rozměrů v různých dimenzích. Aspose.Slides poskytuje vlastnost AspectRatioLocked, která vám umožní uzamknout nastavení poměru stran pro tabulky i další tvary.

Tento C# kód ukazuje, jak uzamknout poměr stran tabulky:

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; // invertovat

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

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

Často kladené otázky

Mohu povolit č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é pořadí RTL 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 zámky tvarů, které zakážou přesouvání, změnu velikosti, výběr atd. Tyto zámky platí i pro tabulky.

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

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