Spravovat řádky a sloupce v tabulkách PowerPoint pomocí C++

Úvod

Aby vám umožnil spravovat řádky a sloupce tabulky v prezentaci PowerPoint, Aspose.Slides poskytuje třídu Table a rozhraní ITable a mnoho dalších typů.

Nastavit první řádek jako záhlaví

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci.
  2. Získejte referenci na snímek podle jeho indexu.
  3. Vytvořte objekt ITable a nastavte jej na null.
  4. Projděte všechny objekty IShape a najděte požadovanou tabulku.
  5. Nastavte první řádek tabulky jako její záhlaví.

Tento kód v C++ vám ukazuje, jak nastavit první řádek tabulky jako záhlaví:

// Vytvoří instanci třídy Presentation 
auto pres = System::MakeObject<Presentation>(u"table.pptx");

// Získá první snímek
auto sld = pres->get_Slides()->idx_get(0);

// Inicializuje nulový TableEx
SharedPtr<ITable> tbl;

// Iteruje přes tvary a nastaví referenci na tabulku
for (const auto& shp : sld->get_Shapes())
{
    if (ObjectExt::Is<ITable>(shp))
    {
        tbl = System::ExplicitCast<ITable>(shp);
    }
}

// Nastaví první řádek tabulky jako její záhlaví 
tbl->set_FirstRow(true);

Klonovat řádek nebo sloupec tabulky

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci,
  2. Získejte referenci na snímek podle jeho indexu.
  3. Definujte pole columnWidth.
  4. Definujte pole rowHeight.
  5. Přidejte objekt ITable na snímek pomocí metody AddTable().
  6. Zklonujte řádek tabulky.
  7. Zklonujte sloupec tabulky.
  8. Uložte upravenou prezentaci.

Tento kód v C++ vám ukazuje, jak klonovat řádek nebo sloupec tabulky v PowerPointu:

 // Cesta k adresáři dokumentů.
const String outPath = u"../out/CloningInTable_out.pptx";

// Vytváří instanci třídy Presentation
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Získá první snímek
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);

// Definuje sloupce s šířkami a řádky s výškami
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);

// Přidá tvar tabulky na snímek
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);


// Nastaví formát ohraničení pro každou buňku
for (int x = 0; x < table->get_Rows()->get_Count(); x++)
{
	SharedPtr<IRow> row = table->get_Rows()->idx_get(x);
	for (int y = 0; y < row->get_Count(); y++)
	{
		SharedPtr<ICell> cell = row->idx_get(y);

		cell->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderTop()->set_Width(5);

		cell->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderBottom()->set_Width(5);

		cell->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderLeft()->set_Width(5);

		cell->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderRight()->set_Width(5);

	}

}

table->idx_get(0, 0)->get_TextFrame()->set_Text(u"00");
table->idx_get(0, 1)->get_TextFrame()->set_Text(u"01");
table->idx_get(0, 2)->get_TextFrame()->set_Text(u"02");
table->idx_get(0, 3)->get_TextFrame()->set_Text(u"03");
table->idx_get(1, 0)->get_TextFrame()->set_Text(u"10");
table->idx_get(2, 0)->get_TextFrame()->set_Text(u"20");
table->idx_get(1, 1)->get_TextFrame()->set_Text(u"11");
table->idx_get(2, 1)->get_TextFrame()->set_Text(u"21");

//AddClone přidá řádek na konec tabulky
table->get_Rows()->AddClone(table->get_Rows()->idx_get(0), false);

//InsertClone přidá řádek na konkrétní pozici v tabulce
table->get_Rows()->InsertClone(2, table->get_Rows()->idx_get(0), false);

//AddClone přidá sloupec na konec tabulky
table->get_Columns()->AddClone(table->get_Columns()->idx_get(0), false);

//InsertClone přidá sloupec na konkrétní pozici v tabulce
table->get_Columns()->InsertClone(2, table->get_Columns()->idx_get(0), false);


// Uloží prezentaci na disk
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Odstranit řádek nebo sloupec z tabulky

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci,
  2. Získejte referenci na snímek podle jeho indexu.
  3. Definujte pole columnWidth.
  4. Definujte pole rowHeight.
  5. Přidejte objekt ITable na snímek pomocí metody AddTable().
  6. Odstraňte řádek tabulky.
  7. Odstraňte sloupec tabulky.
  8. Uložte upravenou prezentaci.

Tento kód v C++ vám ukazuje, jak odstranit řádek nebo sloupec z tabulky:

// Cesta k adresáři dokumentů.
const String outPath = u"../out/RemovingRowColumn_out.pptx";

// Vytvoří instanci třídy Presentation
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Získá první snímek
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);

// Definuje sloupce s šířkami a řádky s výškami
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);

// Přidá tvar tabulky na snímek
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);

table->get_Rows()->RemoveAt(1, false);
table->get_Columns()->RemoveAt(1, false);


// Spojí buňky (1, 1) x (2, 1)
table->MergeCells(table->idx_get(1, 1), table->idx_get(2, 1), false);

// Spojí buňky (1, 2) x (2, 2)
table->MergeCells(table->idx_get(1, 2), table->idx_get(2, 2), false);

// Uloží prezentaci na disk
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Nastavit formátování textu na úrovni řádku tabulky

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci,
  2. Získejte referenci na snímek podle jeho indexu.
  3. Získejte přístup k požadovanému objektu ITable ze snímku.
  4. Nastavte výšku písma buněk v prvním řádku pomocí set_FontHeight().
  5. Nastavte zarovnání buněk v prvním řádku pomocí set_Alignment() a pravý okraj pomocí set_MarginRight().
  6. Nastavte svislý typ textu buněk ve druhém řádku pomocí set_TextVerticalType().
  7. Uložte upravenou prezentaci.

Tento kód v C++ demonstruje operaci.

// Vytvoří instanci třídy Presentation
auto presentation = System::MakeObject<Presentation>();

auto slide = presentation->get_Slides()->idx_get(0);

auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Předpokládejme, že první tvar na prvním snímku je tabulka
// Nastaví výšku písma buněk v prvním řádku
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->get_Rows()->idx_get(0)->SetTextFormat(portionFormat);

// Nastaví zarovnání textu buněk v prvním řádku a pravý okraj
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->get_Rows()->idx_get(0)->SetTextFormat(paragraphFormat);

// Nastaví svislý typ textu buněk ve druhém řádku
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->get_Rows()->idx_get(1)->SetTextFormat(textFrameFormat);

// Uloží prezentaci na disk
presentation->Save(u"result.pptx", SaveFormat::Pptx);

Nastavit formátování textu na úrovni sloupce tabulky

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci,
  2. Získejte referenci na snímek podle jeho indexu.
  3. Získejte přístup k požadovanému objektu ITable ze snímku.
  4. Nastavte výšku písma buněk v prvním sloupci pomocí set_FontHeight().
  5. Nastavte zarovnání buněk v prvním sloupci pomocí set_Alignment() a pravý okraj pomocí set_MarginRight().
  6. Nastavte svislý typ textu buněk ve druhém sloupci pomocí set_TextVerticalType().
  7. Uložte upravenou prezentaci.

Tento kód v C++ demonstruje operaci:

// Vytvoří instanci třídy Presentation
auto pres = System::MakeObject<Presentation>();

auto slide = pres->get_Slides()->idx_get(0);

auto someTable = System::AsCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Předpokládejme, že první tvar na prvním snímku je tabulka

// Nastaví výšku písma buněk v prvním sloupci
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->get_Columns()->idx_get(0)->SetTextFormat(portionFormat);

// Nastaví zarovnání textu buněk v prvním sloupci a pravý okraj v jednom volání
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->get_Columns()->idx_get(0)->SetTextFormat(paragraphFormat);

// Nastaví svislý typ textu buněk ve druhém sloupci
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->get_Columns()->idx_get(1)->SetTextFormat(textFrameFormat);

pres->Save(u"result.pptx", SaveFormat::Pptx);

Získat vlastnosti stylu tabulky

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

auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slide(0)->get_Shapes();
auto table = System::ExplicitCast<ITable>(shapes->AddTable(10, 10, System::MakeArray<double>({100, 150}), System::MakeArray<double>({5, 5, 5})));

table->set_StylePreset(TableStylePreset::DarkStyle1);
pres->Save(u"table.pptx", SaveFormat::Pptx);

Často kladené otázky

Mohu použít motivy/styly PowerPointu na již vytvořenou tabulku?

Ano. Tabulka dědí motiv snímku/vzhledu/mistra a můžete nad tímto motivem stále přepsat výplně, okraje a barvy textu.

Mohu řadit řádky tabulky jako v Excelu?

Ne, tabulky Aspose.Slides nemají vestavěné řazení ani filtry. Seřaďte data v paměti nejprve a pak znovu naplňte řádky tabulky v tomto pořadí.

Mohu mít pruhované (stripované) sloupce a přitom zachovat vlastní barvy ve specifických buňkách?

Ano. Zapněte pruhované sloupce a poté přepište konkrétní buňky lokálním formátováním; formátování na úrovni buňky má přednost před stylem tabulky.