مدیریت جداول ارائه در C++

معرفی

یک جدول در PowerPoint روشی کارآمد برای نمایش و تصویر کردن اطلاعات است. اطلاعات در یک شبکه سلول‌ها (که به صورت ردیف‌ها و ستون‌ها ترتیب یافته‌اند) ساده و به راحتی قابل درک هستند.

Aspose.Slides کلاس Table ، رابط ITable ، کلاس Cell ، رابط ICell و انواع دیگر را ارائه می‌دهد تا بتوانید جدول‌ها را در انواع ارائه‌ها ایجاد، به‌روزرسانی و مدیریت کنید.

ایجاد جدول از صفر

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک آرایه از columnWidth تعریف کنید.
  4. یک آرایه از rowHeight تعریف کنید.
  5. یک شیء ITable را به اسلاید اضافه کنید با استفاده از متد AddTable().
  6. برای هر ICell به منظور اعمال قالب‌بندی به حاشیه‌های بالا، پایین، راست و چپ، تکرار کنید.
  7. دو سلول اول ردیف اول جدول را ادغام کنید.
  8. به TextFrame مربوط به یک ICell دسترسی پیدا کنید.
  9. متنی به TextFrame اضافه کنید.
  10. ارائهٔ اصلاح‌شده را ذخیره کنید.
// یک شیء از کلاس Presentation می‌سازد که نمایانگر یک فایل PPTX است
auto pres = System::MakeObject<Presentation>();

// به اسلاید اول دسترسی می‌یابد
auto sld = pres->get_Slides()->idx_get(0);

// ستون‌ها را با عرض‌ها و ردیف‌ها را با ارتفاع‌ها تعریف می‌کند
auto dblCols = System::MakeArray<double>({ 50, 50, 50 });
auto dblRows = System::MakeArray<double>({ 50, 30, 30, 30, 30 });

// یک شکل جدول را به اسلاید اضافه می‌کند
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);

// قالب حاشیه را برای هر سلول تنظیم می‌کند
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);
    }
}
// سلول‌های ۱ و ۲ ردیف ۱ را ادغام می‌کند
tbl->MergeCells(tbl->get_Rows()->idx_get(0)->idx_get(0), tbl->get_Rows()->idx_get(1)->idx_get(1), false);

// متنی به سلول ادغام‌شده اضافه می‌کند
tbl->get_Rows()->idx_get(0)->idx_get(0)->get_TextFrame()->set_Text(u"Merged Cells");

// ارائه را روی دیسک ذخیره می‌کند
pres->Save(u"table.pptx", SaveFormat::Pptx);

شماره‌گذاری در جدول استاندارد

در یک جدول استاندارد، شماره‌گذاری سلول‌ها ساده و مبتنی بر صفر است. اولین سلول در یک جدول با اندیس 0,0 (ستون 0، ردیف 0) شناخته می‌شود.

به عنوان مثال، سلول‌های یک جدول با 4 ستون و 4 ردیف به این شکل شماره‌گذاری می‌شوند:

(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)

این کد C++ نشان می‌دهد چگونه شماره‌گذاری سلول‌ها را در یک جدول مشخص کنید:

// یک شیء از کلاس Presentation می‌سازد که نمایانگر یک فایل PPTX است
auto pres = System::MakeObject<Presentation>();

// به اسلاید اول دسترسی می‌یابد
auto sld = pres->get_Slides()->idx_get(0);

// ستون‌ها را با عرض‌ها و ردیف‌ها را با ارتفاع‌ها تعریف می‌کند
auto dblCols = System::MakeArray<double>({ 70, 70, 70, 70 });
auto dblRows = System::MakeArray<double>({ 70, 70, 70, 70 });

// یک شکل جدول را به اسلاید اضافه می‌کند
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);

// قالب حاشیه را برای هر سلول تنظیم می‌کند
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);
    }
}

// ارائه را روی دیسک ذخیره می‌کند
pres->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);

دسترسی به جدول موجود

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع اسلایدی که حاوی جدول است را از طریق شاخص آن دریافت کنید.
  3. یک شیء ITable ایجاد کنید و آن را به null تنظیم کنید.
  4. تمام اشیاء IShape را تا پیدا شدن جدول تکرار کنید.

اگر گمان می‌کنید اسلاید موردنظر تنها یک جدول دارد، می‌توانید به سادگی تمام اشکالی که در آن وجود دارد را بررسی کنید. هنگامی که یک شکل به عنوان جدول شناسایی شد، می‌توانید آن را به یک شیء Table تبدیل کنید. اما اگر اسلاید شامل چندین جدول باشد، بهتر است جدول موردنیاز را از طریق متد set_AlternativeText() جستجو کنید.

  1. از شیء ITable برای کار با جدول استفاده کنید. در مثال زیر یک ردیف جدید به جدول اضافه کرده‌ایم.
  2. ارائهٔ اصلاح‌شده را ذخیره کنید.
// یک شیء از کلاس Presentation می‌سازد که نمایانگر یک فایل PPTX است
auto pres = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");

// به اسلاید اول دسترسی می‌یابد
auto sld = pres->get_Slides()->idx_get(0);

// جدول را به مقدار null مقداردهی می‌کند
System::SharedPtr<ITable> tbl;

// از طریق اشکال تکرار می‌کند و مرجعی به جدول یافت‌شده تنظیم می‌کند
for (const auto& shp : System::IterateOver(sld->get_Shapes()))
{
    if (System::ObjectExt::Is<ITable>(shp))
    {
        tbl = System::ExplicitCast<ITable>(shp);
    }
}

// متن را برای ستون اول ردیف دوم تنظیم می‌کند
tbl->idx_get(0, 1)->get_TextFrame()->set_Text(u"New");

// ارائهٔ اصلاح‌شده را روی دیسک ذخیره می‌کند
pres->Save(u"table1_out.pptx", SaveFormat::Pptx);

هم‌راست کردن متن در جدول

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک شیء ITable را به اسلاید اضافه کنید.
  4. یک شیء ITextFrame را از جدول دسترسی پیدا کنید.
  5. به IParagraph مربوط به ITextFrame دسترسی پیدا کنید.
  6. متن را به صورت عمودی هم‌راست کنید.
  7. ارائهٔ اصلاح‌شده را ذخیره کنید.
// یک نمونه از کلاس Presentation ایجاد می‌کند
auto presentation = System::MakeObject<Presentation>();

// اسلاید اول را دریافت می‌کند 
auto slide = presentation->get_Slides()->idx_get(0);

// ستون‌ها را با عرض‌ها و ردیف‌ها را با ارتفاع‌ها تعریف می‌کند
auto dblCols = System::MakeArray<double>({ 120, 120, 120, 120 });
auto dblRows = System::MakeArray<double>({ 100, 100, 100, 100 });

// شکل جدول را به اسلاید اضافه می‌کند
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");

// به فریم متن دسترسی می‌یابد
auto txtFrame = tbl->idx_get(0, 0)->get_TextFrame();

// شیء Paragraph را برای فریم متن ایجاد می‌کند
auto paragraph = txtFrame->get_Paragraphs()->idx_get(0);

// شیء Portion را برای پاراگراف ایجاد می‌کند
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());

// متن را به صورت عمودی هم‌راست می‌کند
auto cell = tbl->idx_get(0, 0);
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);

// ارائه را بر روی دیسک ذخیره می‌کند
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);

تنظیم قالب‌بندی متن در سطح جدول

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک شیء ITable را از اسلاید دسترسی پیدا کنید.
  4. برای متن، set_FontHeight() را تنظیم کنید.
  5. set_Alignment() و set_MarginRight() را تنظیم کنید.
  6. set_TextVerticalType() را تنظیم کنید.
  7. ارائهٔ اصلاح‌شده را ذخیره کنید.
// یک نمونه از کلاس 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));

// ارتفاع قلم سلول‌های جدول را تنظیم می‌کند
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->SetTextFormat(portionFormat);

// ترازبندی متن سلول‌های جدول و حاشیهٔ راست را در یک فراخوانی تنظیم می‌کند
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->SetTextFormat(paragraphFormat);

// نوع عمودی متن سلول‌های جدول را تنظیم می‌کند
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->SetTextFormat(textFrameFormat);

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

دریافت ویژگی‌های سبک جدول

Aspose.Slides به شما اجازه می‌دهد ویژگی‌های سبک یک جدول را بازیابی کنید تا بتوانید این جزئیات را برای جدول دیگر یا مکان دیگری استفاده کنید. این کد C++ نشان می‌دهد چگونه ویژگی‌های سبک را از یک سبک پیش‌فرض جدول دریافت کنید:

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);

قفل کردن نسبت عرض به ارتفاع جدول

نسبت عرض به ارتفاع یک شکل هندسی، نسبت ابعاد آن در جهت‌های مختلف است. Aspose.Slides ویژگی AspectRatioLocked() را ارائه کرده است تا بتوانید تنظیم نسبت عرض به ارتفاع را برای جدول‌ها و سایر اشکال قفل کنید.

این کد C++ نشان می‌دهد چگونه نسبت عرض به ارتفاع را برای یک جدول قفل کنید:

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);

سؤالات متداول

آیا می‌توانم جهت خواندن راست به چپ (RTL) را برای یک جدول کامل و متن داخل سلول‌های آن فعال کنم؟

بله. جدول متد set_RightToLeft را در اختیار می‌گذارد و پاراگراف‌ها متد ParagraphFormat::set_RightToLeft دارند. استفاده از هر دو اطمینان می‌دهد که ترتیب و رندر صحیح RTL داخل سلول‌ها اعمال شود.

چگونه می‌توانم از جابجا یا تغییر اندازه جدول توسط کاربران در فایل نهایی جلوگیری کنم؟

از shape locks استفاده کنید تا جابجایی، تغییر اندازه، انتخاب و غیره غیرفعال شوند. این قفل‌ها برای جدول‌ها نیز اعمال می‌شوند.

آیا درج تصویر داخل یک سلول به عنوان پس‌زمینه پشتیبانی می‌شود؟

بله. می‌توانید برای یک سلول picture fill تنظیم کنید؛ تصویر بسته به حالت انتخابی (کشاندن یا کاشی) کل ناحیه سلول را پوشش می‌دهد.