إدارة جداول العروض التقديمية باستخدام بايثون
المقدمة
تُنظِّم الجداول في PowerPoint المعلومات في صفوف وأعمدة، مما يسهل قراءتها ومقارنة القيم.
توفر Aspose.Slides الفئات Table وCell وأنواعًا أخرى لتتيح لك إنشاء الجداول وتحديثها وإدارتها في العروض التقديمية.
إنشاء جدول من الصفر
قم بإنشاء جدول عن طريق تحديد موقعه وعرض الأعمدة وارتفاع الصفوف. بعد إضافته إلى شريحة، يمكنك تنسيق حدود الخلايا، دمج الخلايا، وإدراج النص.
- إنشاء مثيل من الفئة Presentation .
- احصل على مرجع إلى الشريحة باستخدام فهرسها.
- عرّف قائمة بعروض الأعمدة بالنقاط.
- عرّف قائمة بارتفاعات الصفوف بالنقاط.
- أضف كائنًا Table إلى الشريحة عبر الطريقة add_table .
- تجوّل عبر كل Cell لتطبيق تنسيق على الحدود العليا والسفلى واليمين واليسار.
- ادمج الخلية الأولى والثانية في الصف الأول للجدول.
- الوصول إلى الخلية المدمجة عبر خاصية text_frame .
- عيّن النص في الخلية المدمجة.
- احفظ العرض التقديمي المعدل.
المثال أدناه ينشئ جدولًا به ثلاثة أعمدة وخمس صفوف عند (100, 50) نقطة. يطبق حدودًا حمراء بعرض 5 نقاط، يدمج الخليتين الأوليين في الصف الأول، ويحفظ النتيجة باسم table.pptx.
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
table = slide.shapes.add_table(100, 50, column_widths, row_heights)
for row in table.rows:
for cell in row:
cell_format = cell.cell_format
cell_format.border_top.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_top.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_top.width = 5
cell_format.border_bottom.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_bottom.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_bottom.width = 5
cell_format.border_left.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_left.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_left.width = 5
cell_format.border_right.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_right.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_right.width = 5
table.merge_cells(table.rows[0][0], table.rows[0][1], False)
table.rows[0][0].text_frame.text = "Merged Cells"
presentation.save("table.pptx", slides.export.SaveFormat.PPTX)
الترقيم في جدول قياسي
في جدول قياسي، تكون مؤشرات الخلايا تبدأ من الصفر وتستخدم الترتيب (العمود، الصف). تُعطى الخلية الأولى الفهرس (0, 0). في بايثون، يمكن الوصول إلى خلية عبر table.rows[row_index][column_index]; يأتي فهرس الصف أولًا في هذه الصيغة.
على سبيل المثال، تُرقم الخلايا في جدول يحتوي على 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) |
ينشئ هذا المثال جدول 4 × 4 الموضح أعلاه، بعرض أعمدة وارتفاع صفوف بقيمة 70 نقطة وحدود خلايا حمراء بعرض 5 نقاط. تُظهر الإحداثيات مؤشرات الخلايا؛ يترك المثال الخلايا فارغة ويحفظ الجدول باسم StandardTables_out.pptx.
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
table = slide.shapes.add_table(100, 50, column_widths, row_heights)
for row in table.rows:
for cell in row:
cell_format = cell.cell_format
cell_format.border_top.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_top.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_top.width = 5
cell_format.border_bottom.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_bottom.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_bottom.width = 5
cell_format.border_left.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_left.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_left.width = 5
cell_format.border_right.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_right.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_right.width = 5
presentation.save("StandardTables_out.pptx", slides.export.SaveFormat.PPTX)
الوصول إلى جدول موجود
تُخزن الجداول في مجموعة الأشكال الخاصة بالشريحة. تجوّل عبر الأشكال لتحديد جدول، ثم استخدم الفئة Table لقراءة خلاياه أو تعديلها.
- حمِّل العرض التقديمي باستخدام الفئة Presentation .
- احصل على مرجع إلى الشريحة التي تحتوي على الجدول باستخدام فهرسها.
- تجوّل عبر كائنات Shape وتوقف عند العثور على جدول. إذا احتوت الشريحة على عدة جداول، استخدم alternative_text لتحديد الجدول المطلوب.
- حدّث النص في الخلية المستهدفة.
- احفظ العرض التقديمي المعدل.
يفتح المثال أدناه الملف UpdateExistingTable.pptx ويعثر على أول جدول في الشريحة الأولى. يعيّن الخلية في العمود 0، الصف 1 إلى New ويحفظ النتيجة باسم table1_out.pptx. يجب أن يحتوي الإدخال على شريحة واحدة على الأقل، ويجب أن يحتوي أول جدول في تلك الشريحة على عمود واحد على الأقل وصفين على الأقل.
import aspose.slides as slides
with slides.Presentation("UpdateExistingTable.pptx") as presentation:
slide = presentation.slides[0]
table = None
for shape in slide.shapes:
if isinstance(shape, slides.Table):
table = shape
break
if table is not None and len(table.rows) >= 2:
table.rows[1][0].text_frame.text = "New"
presentation.save("table1_out.pptx", slides.export.SaveFormat.PPTX)
لإعادة تحجيم صف في جدول موجود وفهم لماذا قد يتجاوز ارتفاعه الفعلي الحد الأدنى المطلوب، راجع Control Row Height.
العثور على الخلية التي تملك إطار نص
عند استلام كود معالجة النص العام كائن TextFrame من جدول، استخدم خاصية TextFrame.parent_cell لاسترداد الـCell المالكة. بالنسبة لإطار نص خلية جدول، تكون TextFrame.parent_cell مُعيَّنة وتكون TextFrame.parent_shape تساوي None، رغم أن الجدول نفسه يُعد شكلًا.
إحداثيات الخلية متاحة عبر خاصيتي Cell.first_column_index وCell.first_row_index للقراءة فقط. كذلك تكون TextFrame.parent_cell للقراءة فقط: توفر التنقل إلى المالك لكنها لا تغيّر الملكية. تأكد دائمًا من فحص الخلية المسترجعة للتحقق من أنها ليست None قبل استخدامها.
للحصول على مثال كامل يحدد مالكي خلية الجدول والشكل، بما في ذلك الأشكال المرتبطة بعناصر SmartArt، راجع Search and Replace Text.
محاذاة النص في جدول
يمكنك التحكم في تثبيت النص عموديًا واتجاهه داخل خلايا الجدول الفردية. المثال في هذا القسم يوسّط النص داخل الخلية الأولى ويدوره بزاوية 270 درجة.
- إنشاء مثيل من الفئة Presentation .
- احصل على مرجع إلى الشريحة باستخدام فهرسها.
- أضف كائنًا Table إلى الشريحة.
- الوصول إلى كائن TextFrame من الجدول.
- الوصول إلى أول Paragraph وتعيين نصه ولونه.
- تعيين خاصيات الخلية text_anchor_type وtext_vertical_type .
- احفظ العرض التقديمي المعدل.
ينشئ هذا المثال جدولًا 4 × 4 بعرض أعمدة 120 نقطة وارتفاع صفوف 100 نقطة. ينسق النص في الخلية (0, 0)، يضيف قيمًا إلى الخلايا المتبقية في الصف الأول، ويحفظ النتيجة باسم Vertical_Align_Text_out.pptx.
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [120, 120, 120, 120]
row_heights = [100, 100, 100, 100]
table = slide.shapes.add_table(100, 50, column_widths, row_heights)
table.rows[0][1].text_frame.text = "10"
table.rows[0][2].text_frame.text = "20"
table.rows[0][3].text_frame.text = "30"
cell = table.rows[0][0]
paragraph = cell.text_frame.paragraphs[0]
portion = paragraph.portions[0]
portion.text = "Text here"
portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
portion.portion_format.fill_format.solid_fill_color.color = draw.Color.black
cell.text_anchor_type = slides.TextAnchorType.CENTER
cell.text_vertical_type = slides.TextVerticalType.VERTICAL270
presentation.save("Vertical_Align_Text_out.pptx", slides.export.SaveFormat.PPTX)
تعيين تنسيق النص على مستوى الجدول
استخدم set_text_format لتطبيق تنسيق النص على جميع خلايا الجدول. تدعم الإصدارات المتعددة تنسيق الجزء والفقرة وإطار النص، لذا يمكنك تعيين هذه الخصائص دون الحاجة إلى التكرار عبر الخلايا الفردية.
- حمّل العرض التقديمي باستخدام الفئة Presentation .
- احصل على مرجع إلى الشريحة باستخدام فهرسها.
- الوصول إلى كائن Table من الشريحة.
- تعيين font_height للنص.
- تعيين alignment وmargin_right .
- تعيين text_vertical_type .
- احفظ العرض التقديمي المعدل.
يفتح المثال أدناه الملف table.pptx، الذي يجب أن يحتوي على شريحة واحدة على الأقل مع جدول كأول شكل. يعيّن حجم الخط إلى 25 نقطة، يضبط محاذاة الفقرات إلى اليمين مع هامش يميني قدره 20 نقطة، ويجعل النص عموديًا. يُحفظ العرض التقديمي المُنسق باسم result.pptx.
import aspose.slides as slides
with slides.Presentation("table.pptx") as presentation:
slide = presentation.slides[0]
table = slide.shapes[0]
portion_format = slides.PortionFormat()
portion_format.font_height = 25
table.set_text_format(portion_format)
paragraph_format = slides.ParagraphFormat()
paragraph_format.alignment = slides.TextAlignment.RIGHT
paragraph_format.margin_right = 20
table.set_text_format(paragraph_format)
text_frame_format = slides.TextFrameFormat()
text_frame_format.text_vertical_type = slides.TextVerticalType.VERTICAL
table.set_text_format(text_frame_format)
presentation.save("result.pptx", slides.export.SaveFormat.PPTX)
الحصول على خصائص نمط الجدول
استخدم style_preset لقراءة أو تعيين نمط مسبق للجدول. يطبق هذا المثال TableStylePreset.DARK_STYLE1 على جدول واحد، يطبع اسم النمط المسبق، ويعيّن نفس النمط لجدول ثانٍ. تُحفظ كلا الجدولين في table-style.pptx.
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [100, 150]
row_heights = [5, 5, 5]
table = slide.shapes.add_table(10, 10, column_widths, row_heights)
table.style_preset = slides.TableStylePreset.DARK_STYLE1
style_preset = table.style_preset
print(f"Table style preset: {style_preset.name}")
another_table = slide.shapes.add_table(10, 100, column_widths, row_heights)
another_table.style_preset = style_preset
presentation.save("table-style.pptx", slides.export.SaveFormat.PPTX)
قفل نسبة أبعاد الجدول
نسبة أبعاد الجدول هي نسبة عرضه إلى ارتفاعه. استخدم aspect_ratio_locked لقفل هذه النسبة للجدول.
يفتح المثال أدناه الملف pres.pptx، الذي يجب أن يحتوي على شريحة واحدة على الأقل مع جدول كأول شكل. يطبع حالة القفل الحالية، يُفعِّل قفل نسبة الأبعاد، يطبع الحالة المحدثة (True)، ويحفظ النتيجة باسم pres-out.pptx.
import aspose.slides as slides
with slides.Presentation("pres.pptx") as presentation:
slide = presentation.slides[0]
table = slide.shapes[0]
print(f"Lock aspect ratio set: {table.shape_lock.aspect_ratio_locked}")
table.shape_lock.aspect_ratio_locked = True
print(f"Lock aspect ratio set: {table.shape_lock.aspect_ratio_locked}")
presentation.save("pres-out.pptx", slides.export.SaveFormat.PPTX)
الأسئلة الشائعة
هل يمكنني تمكين اتجاه القراءة من اليمين إلى اليسار (RTL) لجدول كامل والنص داخل خلاياه؟
نعم. يوفر الجدول خاصية right_to_left ، وتحتوي الفقرات على ParagraphFormat.right_to_left. يضمن استخدامهما معًا الترتيب الصحيح للـRTL وعرضه داخل الخلايا.
كيف يمكنني منع المستخدمين من تحريك أو تغيير حجم الجدول في الملف النهائي؟
استخدم shape locks لتعطيل التحريك، تغيير الحجم، التحديد، إلخ. تُطبق هذه الأقفال على الجداول أيضًا.
هل يتم دعم إدراج صورة داخل خلية كخلفية؟
نعم. يمكنك تعيين picture fill لخلية؛ ستغطّي الصورة مساحة الخلية وفقًا للوضع المختار (تمدد أو تجانب).