PowerPoint-táblázatok kezelése C++-ban
Bevezetés
A táblázat a PowerPointban hatékony módja az információ megjelenítésének és ábrázolásának. Az információ egy cellákból álló rácsban (sorokba és oszlopokba rendezve) egyértelmű és könnyen érthető.
Az Aspose.Slides a Table osztályt, ITable interfészt, Cell osztályt, ICell interfészt és további típusokat biztosít, amelyek lehetővé teszik táblázatok létrehozását, frissítését és kezelését mindenféle bemutatóban.
Táblázat létrehozása az alapoktól
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciáját az indexén keresztül.
- Határozzon meg egy
columnWidthtömböt. - Határozzon meg egy
rowHeighttömböt. - Adjon egy ITable objektumot a diára a AddTable() metódus segítségével.
- Iteráljon minden ICell objektumon, hogy alkalmazza a formázást a felső, alsó, jobb és bal szegélyeken.
- Egyesítse a táblázat első sorának első két celláját.
- Hozzon hozzá egy ICell’s TextFrame objektumához.
- Adjon szöveget a TextFrame.
- Mentse el a módosított bemutatót.
Ez a C++ kód megmutatja, hogyan hozhat létre egy táblázatot egy bemutatóban:
// Létrehozza a Presentation osztály egy példányát, amely egy PPTX fájlt képvisel
auto pres = System::MakeObject<Presentation>();
// Eléri az első diát
auto sld = pres->get_Slides()->idx_get(0);
// Definiálja az oszlopok szélességét és a sorok magasságát
auto dblCols = System::MakeArray<double>({ 50, 50, 50 });
auto dblRows = System::MakeArray<double>({ 50, 30, 30, 30, 30 });
// Táblázat alakzatot ad hozzá a diához
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Beállítja a szegély formátumot minden cellához
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);
}
}
// Egyesíti az 1. sor 1. és 2. celláját
tbl->MergeCells(tbl->get_Rows()->idx_get(0)->idx_get(0), tbl->get_Rows()->idx_get(1)->idx_get(1), false);
// Szöveget ad hozzá az egyesített cellához
tbl->get_Rows()->idx_get(0)->idx_get(0)->get_TextFrame()->set_Text(u"Merged Cells");
// Mentse a bemutatót a lemezre
pres->Save(u"table.pptx", SaveFormat::Pptx);
Számozás egy szabványos táblázatban
Egy szabványos táblázatban a cellák számozása egyszerű és nullától kezdődik. Az első cella a táblázatban 0,0 indexű (oszlop 0, sor 0).
Például egy 4 oszlopos és 4 soros táblázat cellái így vannak számozva:
| (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) |
Ez a C++ kód megmutatja, hogyan adhatja meg a cellák számozását egy táblázatban:
// Létrehozza a Presentation osztály egy példányát, amely egy PPTX fájlt képvisel
auto pres = System::MakeObject<Presentation>();
// Eléri az első diát
auto sld = pres->get_Slides()->idx_get(0);
// Definiálja az oszlopok szélességét és a sorok magasságát
auto dblCols = System::MakeArray<double>({ 70, 70, 70, 70 });
auto dblRows = System::MakeArray<double>({ 70, 70, 70, 70 });
// Táblázat alakzatot ad hozzá a diához
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Beállítja a szegély formátumot minden cellához
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);
}
}
// Mentse a bemutatót a lemezre
pres->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);
Meglévő táblázat elérése
-
Hozzon létre egy példányt a Presentation osztályból.
-
Szerezze meg a táblázatot tartalmazó dia referenciáját az indexén keresztül.
-
Hozzon létre egy ITable objektumot, és állítsa null-ra.
-
Iteráljon az összes IShape objektumon, amíg meg nem találja a táblázatot.
Ha úgy véli, hogy a kezelt dia egyetlen táblázatot tartalmaz, egyszerűen ellenőrizheti az összes benne lévő alakzatot. Ha egy alakzatot táblázatként azonosítanak, típuskonvertálhatja azt Table objektummá. Ha azonban a dia több táblázatot tartalmaz, érdemes a kívánt táblázatot a set_AlternativeText() metódus segítségével keresni.
-
Használja a ITable objektumot a táblázattal való munkához. Az alábbi példában új sort adtunk a táblázathoz.
-
Mentse el a módosított bemutatót.
Ez a C++ kód megmutatja, hogyan érheti el és dolgozhat egy meglévő táblázattal:
// Létrehozza a Presentation osztály egy példányát, amely egy PPTX fájlt képvisel
auto pres = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");
// Eléri az első diát
auto sld = pres->get_Slides()->idx_get(0);
// null táblát inicializál
System::SharedPtr<ITable> tbl;
// Végig iterál a alakzatokon és beállítja a megtalált táblázatra a hivatkozást
for (const auto& shp : System::IterateOver(sld->get_Shapes()))
{
if (System::ObjectExt::Is<ITable>(shp))
{
tbl = System::ExplicitCast<ITable>(shp);
}
}
// Beállítja a szöveget a második sor első oszlopához
tbl->idx_get(0, 1)->get_TextFrame()->set_Text(u"New");
// Mentse a módosított bemutatót a lemezre
pres->Save(u"table1_out.pptx", SaveFormat::Pptx);
Szöveg igazítása táblázatban
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciáját az indexén keresztül.
- Adjon egy ITable objektumot a diára.
- Hozzon hozzá egy ITextFrame objektumot a táblázatból.
- Hozzon hozzá az ITextFrame IParagraph objektumához.
- Igazítsa a szöveget függőlegesen.
- Mentse el a módosított bemutatót.
Ez a C++ kód megmutatja, hogyan igazítható a szöveg egy táblázatban:
// Létrehoz egy példányt a Presentation osztályból
auto presentation = System::MakeObject<Presentation>();
// Első diát kap meg
auto slide = presentation->get_Slides()->idx_get(0);
// Definiálja az oszlopok szélességét és a sorok magasságát
auto dblCols = System::MakeArray<double>({ 120, 120, 120, 120 });
auto dblRows = System::MakeArray<double>({ 100, 100, 100, 100 });
// A táblázat alakzatot hozzáadja a diához
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");
// Hozzáfér a szövegkerethez
auto txtFrame = tbl->idx_get(0, 0)->get_TextFrame();
// Létrehozza a Paragraph objektumot a szövegkerethez
auto paragraph = txtFrame->get_Paragraphs()->idx_get(0);
// Létrehozza a Portion objektumot a bekezdéshez
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());
// Függőlegesen igazítja a szöveget
auto cell = tbl->idx_get(0, 0);
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);
// Mentse a bemutatót a lemezre
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
Szövegformázás beállítása táblázati szinten
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciáját az indexén keresztül.
- Hozzon hozzá egy ITable objektumot a diáról.
- Állítsa be a szöveg set_FontHeight() értékét.
- Állítsa be a set_Alignment() és a set_MarginRight() értékeket.
- Állítsa be a set_TextVerticalType() értéket.
- Mentse el a módosított bemutatót.
Ez a C++ kód megmutatja, hogyan alkalmazhatja a kedvenc formázási beállításait a táblázat szövegére:
// Létrehozza a Presentation osztály egy példányát
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Tegyük fel, hogy az első dia első alakzata egy táblázat
auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Beállítja a táblázat celláinak betűmagasságát
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->SetTextFormat(portionFormat);
// Egy hívással beállítja a táblázat celláinak szövegigazítását és jobb margóját
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->SetTextFormat(paragraphFormat);
// Beállítja a táblázat celláinak szöveg függőleges típusát
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->SetTextFormat(textFrameFormat);
presentation->Save(u"result.pptx", SaveFormat::Pptx);
Táblázat stílus tulajdonságainak lekérése
Aspose.Slides lehetővé teszi, hogy lekérje egy táblázat stílus tulajdonságait, hogy ezeket a részleteket egy másik táblázathoz vagy más helyen felhasználhassa. Ez a C++ kód megmutatja, hogyan lehet a táblázat előre beállított stílusából lekérni a stílus tulajdonságait:
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);
A táblázat képarányának zárolása
Egy geometriai alakzat képaránya a méretei aránya különböző dimenziókban. Az Aspose.Slides biztosítja az AspectRatioLocked() tulajdonságot, amely lehetővé teszi a táblázatok és más alakzatok képarányának zárolását.
Ez a C++ kód megmutatja, hogyan zárolható a táblázat képaránya:
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);
GYIK
Engedélyezhetem a jobbról balra (RTL) olvasási irányt egy egész táblázatban és a cellák szövegében?
Igen. A táblázat rendelkezik egy set_RightToLeft metódussal, a bekezdéseknek pedig ParagraphFormat::set_RightToLeft metódusa van. Mindkettő használata biztosítja a helyes RTL sorrendet és megjelenítést a cellákon belül.
Hogyan akadályozhatom meg, hogy a felhasználók áthelyezzék vagy átméretezzék a táblázatot a végleges fájlban?
Használja a shape locks lehetőséget a mozgatás, átméretezés, kijelölés stb. letiltásához. Ezek a zárolások a táblázatokra is érvényesek.
Támogatott-e egy kép cellába háttérként történő beszúrása?
Igen. Beállíthat egy picture fill kitöltést egy cellához; a kép a választott módnak (nyújtás vagy ismétlés) megfelelően lefedi a cellaterületet.