Beheer presentatietabellen in C++
Inleiding
Een tabel in PowerPoint is een efficiënte manier om informatie weer te geven en te presenteren. De informatie in een raster van cellen (geordend in rijen en kolommen) is duidelijk en eenvoudig te begrijpen.
Aspose.Slides biedt de Table klasse, ITable interface, Cell klasse, ICell interface en andere types om tabellen in allerlei presentaties te maken, bij te werken en te beheren.
Maak een tabel vanaf nul
- Maak een instantie van de Presentation klasse.
- Haal een referentie naar een dia op via de index.
- Definieer een array van
columnWidth. - Definieer een array van
rowHeight. - Voeg een ITable object toe aan de dia via de AddTable() methode.
- Loop door elke ICell om opmaak toe te passen op de boven-, onder-, rechter- en linkerranden.
- Voeg de eerste twee cellen van de eerste rij van de tabel samen.
- Open de TextFrame van een ICell.
- Voeg wat tekst toe aan de TextFrame.
- Sla de aangepaste presentatie op.
Deze C++‑code laat zien hoe je een tabel in een presentatie maakt:
// Instantieert een Presentation‑klasse die een PPTX‑bestand representeert
auto pres = System::MakeObject<Presentation>();
// Toegang tot de eerste dia
auto sld = pres->get_Slides()->idx_get(0);
// Definieert kolommen met breedtes en rijen met hoogtes
auto dblCols = System::MakeArray<double>({ 50, 50, 50 });
auto dblRows = System::MakeArray<double>({ 50, 30, 30, 30, 30 });
// Voegt een tabelvorm toe aan de dia
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Stelt het randformaat in voor elke cel
for (int32_t row = 0; row < tbl->get_Rows()->get_Count(); row++)
{
for (int32_t cell = 0; cell < tbl->get_Rows()->idx_get(row)->get_Count(); cell++)
{
auto cellFormat = tbl->get_Rows()->idx_get(row)->idx_get(cell)->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType((FillType::Solid));
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Voegt cellen 1 & 2 van rij 1 samen
tbl->MergeCells(tbl->get_Rows()->idx_get(0)->idx_get(0), tbl->get_Rows()->idx_get(1)->idx_get(1), false);
// Voegt wat tekst toe aan de samengevoegde cel
tbl->get_Rows()->idx_get(0)->idx_get(0)->get_TextFrame()->set_Text(u"Merged Cells");
// Slaat de presentatie op naar schijf
pres->Save(u"table.pptx", SaveFormat::Pptx);
Nummering in een standaardtabel
In een standaardtabel is de nummering van cellen rechttoe rechtaan en nulgebaseerd. De eerste cel in een tabel heeft de index 0,0 (kolom 0, rij 0).
Voorbeeld: de cellen in een tabel met 4 kolommen en 4 rijen worden als volgt genummerd:
| (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) |
Deze C++‑code laat zien hoe je de nummering voor cellen in een tabel specificeert:
// Instantieert een Presentation‑klasse die een PPTX‑bestand representeert
auto pres = System::MakeObject<Presentation>();
// Toegang tot de eerste dia
auto sld = pres->get_Slides()->idx_get(0);
// Definieert kolommen met breedtes en rijen met hoogtes
auto dblCols = System::MakeArray<double>({ 70, 70, 70, 70 });
auto dblRows = System::MakeArray<double>({ 70, 70, 70, 70 });
// Voegt een tabelvorm toe aan de dia
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Stelt het randformaat in voor elke cel
for (const auto& row : tbl->get_Rows())
{
for (const auto& cell : row)
{
auto cellFormat = cell->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Slaat de presentatie op naar schijf
pres->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);
Toegang tot een bestaande tabel
-
Maak een instantie van de Presentation klasse.
-
Haal een referentie op naar de dia die de tabel bevat via de index.
-
Maak een ITable object en zet het op null.
-
Doorloop alle IShape objecten totdat de tabel wordt gevonden.
Als je vermoedt dat de dia slechts één tabel bevat, kun je simpelweg alle vormen die erin staan controleren. Wanneer een vorm als een tabel wordt geïdentificeerd, kun je deze casten naar een Table object. Maar als de dia meerdere tabellen bevat, is het beter de tabel die je nodig hebt te zoeken via de set_AlternativeText() methode.
-
Gebruik het ITable object om met de tabel te werken. In het voorbeeld hieronder hebben we een nieuwe rij aan de tabel toegevoegd.
-
Sla de aangepaste presentatie op.
Deze C++‑code laat zien hoe je toegang krijgt tot en werkt met een bestaande tabel:
// Instantieert een Presentation‑klasse die een PPTX‑bestand representeert
auto pres = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");
// Toegang tot de eerste dia
auto sld = pres->get_Slides()->idx_get(0);
// Initialiseert een null‑tabel
System::SharedPtr<ITable> tbl;
// Doorloopt de vormen en stelt een referentie in naar de gevonden tabel
for (const auto& shp : System::IterateOver(sld->get_Shapes()))
{
if (System::ObjectExt::Is<ITable>(shp))
{
tbl = System::ExplicitCast<ITable>(shp);
}
}
// Stelt de tekst in voor de eerste kolom van de tweede rij
tbl->idx_get(0, 1)->get_TextFrame()->set_Text(u"New");
// Slaat de aangepaste presentatie op naar schijf
pres->Save(u"table1_out.pptx", SaveFormat::Pptx);
Tekst uitlijnen in een tabel
- Maak een instantie van de Presentation klasse.
- Haal een referentie naar een dia op via de index.
- Voeg een ITable object toe aan de dia.
- Open een ITextFrame object van de tabel.
- Open de IParagraph van het ITextFrame.
- Lijn de tekst verticaal uit.
- Sla de aangepaste presentatie op.
Deze C++‑code laat zien hoe je de tekst in een tabel uitlijnt:
// Creëert een instantie van de Presentation‑klasse
auto presentation = System::MakeObject<Presentation>();
// Haalt de eerste dia op
auto slide = presentation->get_Slides()->idx_get(0);
// Definieert kolommen met breedtes en rijen met hoogtes
auto dblCols = System::MakeArray<double>({ 120, 120, 120, 120 });
auto dblRows = System::MakeArray<double>({ 100, 100, 100, 100 });
// Voegt de tabelvorm toe aan de dia
auto tbl = slide->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
tbl->idx_get(1, 0)->get_TextFrame()->set_Text(u"10");
tbl->idx_get(2, 0)->get_TextFrame()->set_Text(u"20");
tbl->idx_get(3, 0)->get_TextFrame()->set_Text(u"30");
// Toegang tot het tekstframe
auto txtFrame = tbl->idx_get(0, 0)->get_TextFrame();
// Creëert het Paragraaf‑object voor het tekstframe
auto paragraph = txtFrame->get_Paragraphs()->idx_get(0);
// Creëert het Portion‑object voor de paragraaf
auto portion = paragraph->get_Portions()->idx_get(0);
portion->set_Text(u"Text here");
portion->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
portion->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Black());
// Lijnt de tekst verticaal uit
auto cell = tbl->idx_get(0, 0);
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);
// Slaat de presentatie op naar schijf
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
Tekstopmaak instellen op tabelniveau
- Maak een instantie van de Presentation klasse.
- Haal een referentie naar een dia op via de index.
- Open een ITable object van de dia.
- Stel de set_FontHeight() in voor de tekst.
- Stel de set_Alignment() en set_MarginRight() in.
- Stel de set_TextVerticalType() in.
- Sla de aangepaste presentatie op.
Deze C++‑code laat zien hoe je je gewenste opmaakopties toepast op de tekst in een tabel:
// Maakt een instantie van de Presentation‑klasse
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Laten we aannemen dat de eerste shape op de eerste dia een tabel is
auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Stelt de letterhoogte van de tabelcellen in
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->SetTextFormat(portionFormat);
// Stelt de tekstuitlijning en de rechter marge van de tabelcellen in één oproep in
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->SetTextFormat(paragraphFormat);
// Stelt het verticale type van de tekst in de tabelcellen in
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->SetTextFormat(textFrameFormat);
presentation->Save(u"result.pptx", SaveFormat::Pptx);
Eigenschappen van tabelstijlen ophalen
Aspose.Slides stelt je in staat de stijl‑eigenschappen van een tabel op te halen zodat je die details kunt gebruiken voor een andere tabel of elders. Deze C++‑code laat zien hoe je de stijl‑eigenschappen van een tabelpreset‑stijl verkrijgt:
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);
Verhoudingsvergrendeling van een tabel
De beeldverhouding van een geometrische vorm is de verhouding van de afmetingen in verschillende dimensies. Aspose.Slides biedt de AspectRatioLocked() eigenschap om de beeldverhouding voor tabellen en andere vormen vast te zetten.
Deze C++‑code laat zien hoe je de beeldverhouding van een tabel vergrendelt:
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
auto table = System::ExplicitCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
table->get_GraphicalObjectLock()->set_AspectRatioLocked(!table->get_GraphicalObjectLock()->get_AspectRatioLocked());
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
pres->Save(u"pres-out.pptx", SaveFormat::Pptx);
FAQ
Kan ik de leesrichting van rechts‑naar‑links (RTL) inschakelen voor een volledige tabel en de tekst in de cellen?
Ja. De tabel stelt een set_RightToLeft methode beschikbaar, en alinea’s hebben ParagraphFormat::set_RightToLeft. Door beide te gebruiken zorg je voor de juiste RTL‑volgorde en weergave binnen de cellen.
Hoe kan ik voorkomen dat gebruikers een tabel in het uiteindelijke bestand verplaatsen of van formaat wijzigen?
Gebruik shape locks om verplaatsen, formaat wijzigen, selecteren, enz. uit te schakelen. Deze vergrendelingen gelden ook voor tabellen.
Wordt het invoegen van een afbeelding als achtergrond in een cel ondersteund?
Ja. Je kunt een picture fill instellen voor een cel; de afbeelding bedekt dan het celgebied volgens de gekozen modus (strekken of tegelen).