إدارة خلايا الجداول في العروض التقديمية باستخدام C++
تحديد خلية مدمجة
- أنشئ مثالًا من الفئة Presentation.
- احصل على الجدول من الشريحة الأولى.
- تجول في صفوف وأعمدة الجدول للعثور على الخلايا المدمجة.
- اطبع رسالة عند العثور على خلايا مدمجة.
هذا البرنامج بلغة C++ يوضح لك كيفية تحديد خلايا الجدول المدمجة في عرض تقديمي:
auto pres = System::MakeObject<Presentation>(u"SomePresentationWithTable.pptx");
auto table = System::AsCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// assuming that Slide#0.Shape#0 is a table
for (int32_t i = 0; i < table->get_Rows()->get_Count(); i++)
{
for (int32_t j = 0; j < table->get_Columns()->get_Count(); j++)
{
auto currentCell = table->get_Rows()->idx_get(i)->idx_get(j);
if (currentCell->get_IsMergedCell())
{
Console::WriteLine(String::Format(u"Cell {0};{1} is a part of merged cell with RowSpan={2} and ColSpan={3} starting from Cell {4};{5}.",
i, j, currentCell->get_RowSpan(), currentCell->get_ColSpan(), currentCell->get_FirstRowIndex(), currentCell->get_FirstColumnIndex()));
}
}
}
إزالة حدود خلايا الجدول
- أنشئ مثالًا من الفئة Presentation.
- احصل على مرجع الشريحة عبر فهرستها.
- عرّف مصفوفة الأعمدة مع العرض.
- عرّف مصفوفة الصفوف مع الارتفاع.
- أضف جدولًا إلى الشريحة باستخدام طريقة
AddTable. - تجول في كل خلية لمسح الحدود العليا والسفلى واليمنى واليسرى.
- احفظ العرض التقديمي المعدل كملف PPTX.
هذا البرنامج بلغة C++ يوضح لك كيفية إزالة حدود خلايا الجدول:
// ينشئ فئة Presentation التي تمثل ملف PPTX
auto pres = MakeObject<Presentation>();
// يصل إلى الشريحة الأولى
auto sld = pres->get_Slides()->idx_get(0);
// يحدد الأعمدة بعروضها والصفوف بارتفاعاتها
auto dblCols = MakeArray<double>({ 50, 50, 50, 50 });
auto dblRows = MakeArray<double>({ 50, 30, 30, 30, 30 });
// يضيف شكل جدول إلى الشريحة
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// يضبط تنسيق الحدود لكل خلية
for (const auto& row : System::IterateOver(tbl->get_Rows()))
{
for (const auto& cell : System::IterateOver(row))
{
cell->get_CellFormat()->get_BorderTop()->get_FillFormat()->set_FillType(FillType::NoFill);
cell->get_CellFormat()->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::NoFill);
cell->get_CellFormat()->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::NoFill);
cell->get_CellFormat()->get_BorderRight()->get_FillFormat()->set_FillType(FillType::NoFill);
}
}
// يكتب ملف PPTX إلى القرص
pres->Save(u"table_out.pptx", SaveFormat::Pptx);
الترقيم في الخلايا المدمجة
إذا دمجنا زوجين من الخلايا (1, 1) × (2, 1) و(1, 2) × (2, 2)، سيُرقم الجدول الناتج. يعرض هذا البرنامج بلغة C# العملية:
const String outPath = u"../out/MergeCells_out.pptx";
// يحمّل العرض التقديمي المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// الوصول إلى الشريحة الأولى
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);
// يحدد الأعمدة بعروضها والصفوف بارتفاعاتها
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);
// يضيف شكل جدول إلى الشريحة
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);
// يضبط تنسيق الحدود لكل خلية
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);
}
}
// يدمج الخلايا (1, 1) × (2, 1)
table->MergeCells(table->idx_get(1, 1), table->idx_get(2, 1), false);
// يدمج الخلايا (1, 2) × (2, 2)
table->MergeCells(table->idx_get(1, 2), table->idx_get(2, 2), false);
// يحفظ ملف PPTX إلى القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
ثم نستمر في دمج الخلايا بدمج (1, 1) و(1, 2). النتيجة جدول يحتوي على خلية مدمجة كبيرة في المركز:
// مسار دليل المستندات.
const String outPath = u"../out/MergeCells_out.pptx";
// يقوم بتحميل العرض التقديمي المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// يصل إلى الشريحة الأولى
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);
// يحدد الأعمدة بعروضها والصفوف بارتفاعاتها
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);
// يضيف شكل جدول إلى الشريحة
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);
// يحدد تنسيق الحدود لكل خلية
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);
}
}
// يدمج الخلايا (1, 1) × (2, 1)
table->MergeCells(table->idx_get(1, 1), table->idx_get(2, 1), false);
// يدمج الخلايا (1, 2) × (2, 2)
table->MergeCells(table->idx_get(1, 2), table->idx_get(2, 2), false);
// يحفظ ملف PPTX إلى القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
الترقيم في خلية مقسمة
في الأمثلة السابقة، عندما تم دمج خلايا الجدول، لم يتغير نظام الترقيم في الخلايا الأخرى.
هذه المرة، نأخذ جدولًا عاديًا (بدون خلايا مدمجة) ثم نحاول تقسيم الخلية (1,1) للحصول على جدول خاص. قد تلاحظ أن ترقيم هذا الجدول قد يبدو غير مألوف. ومع ذلك، هذه هي الطريقة التي يقوم بها Microsoft PowerPoint بترقيم خلايا الجداول، وتفعل Aspose.Slides الشيء نفسه.
هذا البرنامج بلغة C++ يوضح العملية التي وصفناها:
// مسار دليل المستندات.
const String outPath = u"../out/CellSplit_out.pptx";
// يحمل العرض التقديمي المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// يصل إلى الشريحة الأولى
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);
// يحدد الأعمدة بعروضها والصفوف بارتفاعاتها
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);
// يضيف شكل جدول إلى الشريحة
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);
// يحدد تنسيق الحدود لكل خلية
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);
}
}
// يدمج الخلايا (1, 1) × (2, 1)
table->MergeCells(table->idx_get(1, 1), table->idx_get(2, 1), false);
// يدمج الخلايا (1, 2) × (2, 2)
table->MergeCells(table->idx_get(1, 2), table->idx_get(2, 2), false);
// يقسم الخلية (1, 1).
table->idx_get(1, 1)->SplitByWidth(table->idx_get(2, 1)->get_Width() / 2);
// يحفظ ملف PPTX إلى القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
تغيير لون خلفية خلية الجدول
هذا البرنامج بلغة C++ يوضح لك كيفية تغيير لون خلفية خلية الجدول:
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
auto dblCols = System::MakeArray<double>({150, 150, 150, 150});
auto dblRows = System::MakeArray<double>({50, 50, 50, 50, 50});
// إنشاء جدول جديد
auto table = slide->get_Shapes()->AddTable(50.0f, 50.0f, dblCols, dblRows);
// set the background color for a cell
System::SharedPtr<ICell> cell = table->idx_get(2, 3);
cell->get_CellFormat()->get_FillFormat()->set_FillType(Aspose::Slides::FillType::Solid);
cell->get_CellFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
presentation->Save(u"cell_background_color.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
إضافة صورة داخل خلية جدول
- أنشئ مثالًا من فئة
Presentation. - احصل على مرجع الشريحة عبر فهرستها.
- عرّف مصفوفة الأعمدة مع العرض.
- عرّف مصفوفة الصفوف مع الارتفاع.
- أضف جدولًا إلى الشريحة باستخدام طريقة
AddTable. - أنشئ كائن
Bitmapلحفظ ملف الصورة. - أضف صورة الـ bitmap إلى كائن
IPPImage. - اضبط
FillFormatلخلية الجدول علىPicture. - أضف الصورة إلى الخلية الأولى في الجدول.
- احفظ العرض التقديمي المعدل كملف PPTX
هذا البرنامج بلغة C# يوضح لك كيفية وضع صورة داخل خلية جدول عند إنشاء جدول:
// مسار دليل المستندات.
const String outPath = u"../out/Image_In_TableCell_out.pptx";
const String ImagePath = u"../templates/Tulips.jpg";
// يقوم بتحميل العرض التقديمي المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// الوصول إلى الشريحة الأولى
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);
// يحدد الأعمدة بعروضها والصفوف بارتفاعاتها
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 150);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 100);
System::ArrayPtr<double> total_for_Cat = System::MakeObject<System::Array<double>>(5, 0);
// يضيف شكل جدول إلى الشريحة
auto tbl = islide->get_Shapes()->AddTable(50, 50, dblCols, dblRows);
// يحصل على الصورة
auto img = Images::FromFile(ImagePath);
// يضيف صورة إلى مجموعة صور العرض التقديمي
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(img);
// يضيف الصورة إلى الخلية الأولى في الجدول
tbl->idx_get(0, 0)->get_FillFormat()->set_FillType(FillType::Picture);
tbl->idx_get(0, 0)->get_FillFormat()->get_PictureFillFormat()->set_PictureFillMode(PictureFillMode::Stretch);
tbl->idx_get(0, 0)->get_FillFormat()->get_PictureFillFormat()->get_Picture()->set_Image(imgx);
// حفظ ملف PPTX إلى القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
الأسئلة المتكررة
هل يمكنني تعيين سمك وأنماط خطوط مختلفة لجوانب خلية واحدة؟
نعم. حدود أعلى/أسفل/يسار/يمين لها خصائص منفصلة، لذا يمكن أن يختلف السمك والنمط لكل جانب. هذا منطقي بناءً على التحكم في حدود كل جانب للخلية كما هو موضح في المقال.
ماذا يحدث للصورة إذا قمت بتغيير حجم العمود/الصف بعد تعيين صورة كخلفية للخلية؟
السلوك يعتمد على وضع التعبئة (تمدد/تلخيص). عند التمدد، تتكيف الصورة مع الخلية الجديدة؛ وعند التلخيص، يُعاد حساب البلاط. يذكر المقال أوضاع عرض الصورة داخل الخلية.
هل يمكنني ربط جميع محتوى الخلية برابط تشعبي؟
يتم تعيين Hyperlinks على مستوى النص (الجزء) داخل إطار نص الخلية أو على مستوى الجدول/الشكل بالكامل. عمليًا، يمكنك ربط الجزء أو كل النص داخل الخلية.
هل يمكنني تعيين خطوط مختلفة داخل خلية واحدة؟
نعم. يدعم إطار نص الخلية الأقسام (الـ portions) بتنسيق مستقل—عائلة الخط، النمط، الحجم، واللون.