Prezentációs táblázatok kezelése C++-ban
Bevezetés
A PowerPoint táblázatai sorokba és oszlopokba rendezik az információkat, megkönnyítve az értékek olvasását és összehasonlítását.
Az Aspose.Slides biztosítja a Table osztályt, a ITable interfészt, a Cell osztályt, a ICell interfészt és egyéb típusokat, amelyek lehetővé teszik táblázatok létrehozását, frissítését és kezelését a prezentációkban.
Táblázat létrehozása semmiből
Hozzon létre egy táblázatot a pozíció, az oszlopszélességek és a sormagasságok megadásával. A diához való hozzáadás után formázhatja a cellahatárokat, egyesítheti a cellákat, és szöveget illeszthet be.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezzen referenciát a diára az indexe alapján.
- Határozzon meg egy tömböt, amely pontban kifejezett oszlopszélességeket tartalmaz.
- Határozzon meg egy tömböt, amely pontban kifejezett sormagasságokat tartalmaz.
- Adjon egy ITable objektumot a diára a AddTable metóduson keresztül.
- Iteráljon minden ICell objektumon, hogy formázza a felső, alsó, jobb és bal határokat.
- Egyesítse a táblázat első sorának első két celláját.
- Hozza el az egyesített cellát a get_TextFrame metódusával.
- Állítsa be a szöveget az egyesített cellában.
- Mentse el a módosított prezentációt.
Az alábbi példa egy három oszlopos és öt soros táblázatot hoz létre (100, 50) pontban. Piros szegélyeket alkalmaz 5 pont szélességgel, egyesíti az első sor első két celláját, és a végeredményt table.pptx néven menti.
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/ILineFillFormat.h>
#include <DOM/ILineFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ICellFormat.h>
#include <DOM/Table/IRow.h>
#include <DOM/Table/IRowCollection.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto columnWidths = System::MakeArray<double>({ 50, 50, 50 });
auto rowHeights = System::MakeArray<double>({ 50, 30, 30, 30, 30 });
auto table = slide->get_Shapes()->AddTable(100.0f, 50.0f, columnWidths, rowHeights);
for (const auto& row : table->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);
}
}
table->MergeCells(table->idx_get(0, 0), table->idx_get(1, 0), false);
table->idx_get(0, 0)->get_TextFrame()->set_Text(u"Merged Cells");
presentation->Save(u"table.pptx", SaveFormat::Pptx);
Számozás egy szabványos táblázatban
Egy szabványos táblázatban a cellaindexek nullától indulnak, és (oszlop, sor) sorrendet követnek. Az első cella indexe (0, 0).
Például a 4 oszlopos és 4 soros táblázat celláit így számozzák:
| (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 példa létrehozza a fent ábrázolt 4 × 4‑es táblázatot, ahol az oszlopszélességek és sormagasságok 70 pontot tesznek ki, és a cellák piros szegélye 5 pont széles. A koordináták a cellaindexeket mutatják; a példa üresen hagyja a cellákat, és a táblázatot StandardTables_out.pptx néven menti.
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/ILineFillFormat.h>
#include <DOM/ILineFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ICellFormat.h>
#include <DOM/Table/IRow.h>
#include <DOM/Table/IRowCollection.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto columnWidths = System::MakeArray<double>({ 70, 70, 70, 70 });
auto rowHeights = System::MakeArray<double>({ 70, 70, 70, 70 });
auto table = slide->get_Shapes()->AddTable(100.0f, 50.0f, columnWidths, rowHeights);
for (const auto& row : table->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);
}
}
presentation->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);
Meglévő táblázat elérése
A táblázatok a diák alakzatgyűjteményében tárolódnak. Iteráljon az alakzatokon, hogy megtalálja a táblázatot, majd használja az ITable interfészt a cellák olvasásához vagy frissítéséhez.
- Töltse be a prezentációt a Presentation osztály segítségével.
- Szerezzen referenciát a táblázatot tartalmazó diára az indexe alapján.
- Iteráljon a IShape objektumokon, és álljon meg, amikor táblázatot talál. Ha a dián több táblázat van, használja a get_AlternativeText metódust a szükséges azonosításához.
- Frissítse a szöveget a célcellában.
- Mentse el a módosított prezentációt.
Az alábbi példa megnyitja az UpdateExistingTable.pptx fájlt, és megtalálja az első táblázatot az első dián. A 0. oszlop, 1. sor celláját New értékre állítja, és a végeredményt table1_out.pptx néven menti. A bemenetnek legalább egy diát kell tartalmaznia, és az első táblázatnak legalább egy oszloppal és két sorral kell rendelkeznie.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <system/enumerator_adapter.h>
#include <system/object_ext.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");
auto slide = presentation->get_Slide(0);
System::SharedPtr<ITable> table;
for (const auto& shape : System::IterateOver(slide->get_Shapes()))
{
if (System::ObjectExt::Is<ITable>(shape))
{
table = System::ExplicitCast<ITable>(shape);
break;
}
}
if (table != nullptr)
{
table->idx_get(0, 1)->get_TextFrame()->set_Text(u"New");
presentation->Save(u"table1_out.pptx", SaveFormat::Pptx);
}
Egy meglévő táblázat sorának átméretezéséhez, és ahhoz, hogy megértse, miért lehet a tényleges magasság a kért minimumot meghaladó, tekintse meg a Sor magasságának vezérlése oldalt.
A szövegdobozot tartalmazó cella megtalálása
Amikor általános szövegfeldolgozó kód egy táblázatból kap egy ITextFrame objektumot, használja a ITextFrame::get_ParentCell metódust a tulajdonos ICell lekéréséhez. Egy táblázatcella szövegdoboz esetén a ITextFrame::get_ParentCell visszaadja a tulajdonost, és a ITextFrame::get_ParentShape nullptr értéket ad, bár maga a táblázat is egy alakzat.
A cellakoordináták a csak olvasható ICell::get_FirstColumnIndex és ICell::get_FirstRowIndex metódusokon keresztül érhetők el. A ITextFrame::get_ParentCell szintén csak olvasható navigációt biztosít: visszaadja a tulajdonost, de nem módosítja a tulajdonjogot. Mindig ellenőrizze, hogy a visszakapott cella nullptr‑e, mielőtt használná.
A táblázatcella és alakzat tulajdonosok azonosítását bemutató teljes példáért, beleértve a SmartArt csomópontokhoz kapcsolódó alakzatokat, tekintse meg a Szöveg keresése és cseréje.
Szöveg igazítása egy táblázatban
Egyes táblázatcellák vertikális rögzítését és szövegirányát vezérelheti. Ennek a szakasznak a példája középre helyezi a szöveget az első cellában, és 270 fokkal elforgatja.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezzen referenciát a diára az indexe alapján.
- Adjon egy ITable objektumot a diára.
- Hozza el a táblázatból egy ITextFrame objektumot.
- Hozza el az első IParagraph objektumot, és állítsa be a szövegét és színét.
- Állítsa be a cella vertikális rögzítését és szövegirányát a set_TextAnchorType és a set_TextVerticalType segítségével.
- Mentse el a módosított prezentációt.
Ez a példa egy 4 × 4‑es táblázatot hoz létre, ahol az oszlopszélességek 120 pont, a sormagasságok 100 pont. Formázza a (0, 0) cella szövegét, értékeket ad a maradék első sorbeli cellákhoz, és a végeredményt Vertical_Align_Text_out.pptx néven menti.
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/IParagraph.h>
#include <DOM/IParagraphCollection.h>
#include <DOM/IPortion.h>
#include <DOM/IPortionCollection.h>
#include <DOM/IPortionFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ITable.h>
#include <DOM/TextAnchorType.h>
#include <DOM/TextVerticalType.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto columnWidths = System::MakeArray<double>({ 120, 120, 120, 120 });
auto rowHeights = System::MakeArray<double>({ 100, 100, 100, 100 });
auto table = slide->get_Shapes()->AddTable(100.0f, 50.0f, columnWidths, rowHeights);
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(3, 0)->get_TextFrame()->set_Text(u"30");
auto cell = table->idx_get(0, 0);
auto paragraph = cell->get_TextFrame()->get_Paragraphs()->idx_get(0);
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());
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
Szövegformázás beállítása táblázatszinten
Használja a SetTextFormat módszert a szövegformázás alkalmazásához a táblázat összes cellájára. A túlterhelései tartománnyal, bekezdéssel és szövegdoboz formázással dolgoznak, így ezeket a tulajdonságokat anélkül állíthatja be, hogy egyes cellákon iterálna.
- Töltse be a prezentációt a Presentation osztály segítségével.
- Szerezzen referenciát a diára az indexe alapján.
- Hozza el a diárról egy ITable objektumot.
- Állítsa be a betűméretet a set_FontHeight segítségével a szöveghez.
- Állítsa be a bekezdés igazítását és a jobb margót a set_Alignment és a set_MarginRight segítségével.
- Állítsa be a szöveg irányát a set_TextVerticalType használatával.
- Mentse el a módosított prezentációt.
Az alábbi példa megnyitja a table.pptx fájlt, amelynek legalább egy diája van, és abban a táblázat az első alakzat. A betűméretet 25 pontra állítja, a bekezdéseket jobbra igazítja 20 pontos jobb margóval, és a szöveget függőlegessé teszi. A formázott prezentáció result.pptx néven kerül mentésre.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ParagraphFormat.h>
#include <DOM/PortionFormat.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ITable.h>
#include <DOM/TextAlignment.h>
#include <DOM/TextFrameFormat.h>
#include <DOM/TextVerticalType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>(u"table.pptx");
auto slide = presentation->get_Slide(0);
auto table = System::ExplicitCast<ITable>(slide->get_Shape(0));
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
table->SetTextFormat(portionFormat);
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
table->SetTextFormat(paragraphFormat);
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
table->SetTextFormat(textFrameFormat);
presentation->Save(u"result.pptx", SaveFormat::Pptx);
Táblázat stílus tulajdonságainak lekérése
Használja a get_StylePreset metódust a táblázat előre beállított stílusának olvasásához, és a set_StylePreset metódust a hozzárendeléshez. Ez a példa a TableStylePreset::DarkStyle1 előre beállítást alkalmaz egy táblázatra, kiírja az előre beállítás nevét, és ugyanazt az előre beállítást a második táblázatra is alkalmazza. Mindkét táblázat table-style.pptx néven kerül mentésre.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ITable.h>
#include <DOM/TableStylePreset.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto columnWidths = System::MakeArray<double>({ 100, 150 });
auto rowHeights = System::MakeArray<double>({ 5, 5, 5 });
auto table = slide->get_Shapes()->AddTable(10, 10, columnWidths, rowHeights);
table->set_StylePreset(TableStylePreset::DarkStyle1);
auto stylePreset = table->get_StylePreset();
System::Console::WriteLine(u"Table style preset: {0}", stylePreset);
auto anotherTable = slide->get_Shapes()->AddTable(10, 100, columnWidths, rowHeights);
anotherTable->set_StylePreset(stylePreset);
presentation->Save(u"table-style.pptx", SaveFormat::Pptx);
Táblázat méretarányának zárolása
A táblázat méretaránya a szélesség és magasság aránya. Használja a set_AspectRatioLocked metódust a méretarány zárolásához egy táblázatra.
Az alábbi példa megnyitja a pres.pptx fájlt, amelynek legalább egy diája van, és abban a táblázat az első alakzat. Kiírja a jelenlegi zárolási állapotot, engedélyezi a méretarány‑zárolást, kiírja a frissített állapotot (True), és a végeredményt pres-out.pptx néven menti.
#include <DOM/IGraphicalObjectLock.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = System::MakeObject<Presentation>(u"pres.pptx");
auto slide = presentation->get_Slide(0);
auto table = System::ExplicitCast<ITable>(slide->get_Shape(0));
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
table->get_GraphicalObjectLock()->set_AspectRatioLocked(true);
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
presentation->Save(u"pres-out.pptx", SaveFormat::Pptx);
FAQ
Engedélyezhetem a jobb‑balra (RTL) olvasási irányt egy teljes táblázat és annak celláiban lévő szöveg számára?
Igen. A táblázat rendelkezik egy set_RightToLeft metódussal, és a bekezdéseknek is van ParagraphFormat::set_RightToLeft metódusa. Mindkettő használata biztosítja a megfelelő RTL sorrendet és megjelenítést a cellákon belül.
Hogyan akadályozhatom meg, hogy a felhasználók mozgatni vagy átméretezni a táblázatot a végleges fájlban?
Használja az alakzatzárolásokat a mozgatás, átméretezés, kiválasztás stb. letiltásához. Ezek a zárolások a táblázatokra is érvényesek.
Támogatott‑e egy kép beillesztése egy cellába háttérként?
Igen. Beállíthat egy picture fill kitöltést egy cellához; a kép a kiválasztott mód (nyújtás vagy csempézés) szerint lefedi a cellaterületet.