كيفية العمل مع الجداول في بايثون

كيفية العمل مع الجداول في بايثون

يدعم Aspose.Slides FOSS for Python إنشاء جداول على الشرائح مع إمكانية ضبط عرض الأعمدة وارتفاع الصفوف. يوضح هذا الدليل كيفية إضافة جدول، ملئه بالبيانات، وتطبيق تنسيق نص أساسي على الخلايا.

دليل خطوة بخطوة

الخطوة 1: تثبيت الحزمة

pip install aspose-slides-foss

الخطوة 2: إنشاء أو فتح عرض تقديمي

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]
    # ... add table ...
    prs.save("table.pptx", SaveFormat.PPTX)

الخطوة 3: تحديد عرض الأعمدة وارتفاع الصفوف

تتطلب الجداول تحديد صريح لعرض الأعمدة وارتفاع الصفوف بالنقاط (نقطة واحدة = 1/72 بوصة). الشريحة القياسية عرضها 720 نقطة وارتفاعها 540 نقطة.

col_widths = [200.0, 150.0, 150.0]   # 3 columns: 200pt + 150pt + 150pt
row_heights = [45.0, 40.0, 40.0]     # 3 rows: 45pt header + 40pt data rows

الخطوة 4: إضافة الجدول

slide.shapes.add_table(x, y, col_widths, row_heights) ينشئ الجدول في الموضع (x, y):

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [200.0, 150.0, 150.0]
    row_heights = [45.0, 40.0, 40.0]
    table = slide.shapes.add_table(50, 100, col_widths, row_heights)

    prs.save("table.pptx", SaveFormat.PPTX)

الخطوة 5: تعيين نص الخلية

الوصول إلى الخلايا عبر table.rows[row_index][col_index] وتعيين النص عبر .text_frame.text:

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [200.0, 150.0, 150.0]
    row_heights = [45.0, 40.0, 40.0]
    table = slide.shapes.add_table(50, 100, col_widths, row_heights)

    # Header row (row 0)
    headers = ["Product", "Units Sold", "Revenue"]
    for col, header in enumerate(headers):
        table.rows[0][col].text_frame.text = header

    # Data rows
    data = [
        ["Widget A", "1,200", "$24,000"],
        ["Widget B", "850", "$17,000"],
    ]
    for row_idx, row_data in enumerate(data):
        for col, cell_text in enumerate(row_data):
            table.rows[row_idx + 1][col].text_frame.text = cell_text

    prs.save("sales-table.pptx", SaveFormat.PPTX)

الخطوة 6: تنسيق نص خلية العنوان

تطبيق تنسيق غامق على خلايا العنوان باستخدام PortionFormat:

from aspose.slides_foss import NullableBool, FillType
from aspose.slides_foss.drawing import Color

for col in range(len(headers)):
    cell = table.rows[0][col]
    portions = cell.text_frame.paragraphs[0].portions
    if portions:
        fmt = portions[0].portion_format
        fmt.font_bold = NullableBool.TRUE
        fmt.fill_format.fill_type = FillType.SOLID
        fmt.fill_format.solid_fill_color.color = Color.from_argb(255, 255, 255, 255)

مثال عملي كامل

import aspose.slides_foss as slides
from aspose.slides_foss import NullableBool, FillType
from aspose.slides_foss.drawing import Color
from aspose.slides_foss.export import SaveFormat

data_rows = [
    ["North", "$1.2M", "+8%"],
    ["South", "$0.9M", "+4%"],
    ["East",  "$1.5M", "+12%"],
    ["West",  "$0.7M", "+2%"],
]
headers = ["Region", "Revenue", "Growth"]

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [180.0, 140.0, 120.0]
    row_heights = [45.0] + [38.0] * len(data_rows)

    table = slide.shapes.add_table(60, 80, col_widths, row_heights)

    # Header row
    for col, text in enumerate(headers):
        cell = table.rows[0][col]
        cell.text_frame.text = text
        if cell.text_frame.paragraphs and cell.text_frame.paragraphs[0].portions:
            fmt = cell.text_frame.paragraphs[0].portions[0].portion_format
            fmt.font_bold = NullableBool.TRUE

    # Data rows
    for row_idx, row_data in enumerate(data_rows):
        for col, text in enumerate(row_data):
            table.rows[row_idx + 1][col].text_frame.text = text

    prs.save("regional-revenue.pptx", SaveFormat.PPTX)

print("Saved regional-revenue.pptx")

المشكلات الشائعة والحلول

IndexError عند الوصول إلى table.rows[row][col]

مؤشرات الصف والعمود تبدأ من الصفر. إذا قمت بتعريف row_heights بـ 3 عناصر، فإن مؤشرات الصف الصالحة هي 0، 1، 2.

نص الخلية لا يظهر في الملف المحفوظ

قم دائمًا بالتعيين عبر .text_frame.text، وليس عبر .text مباشرةً على كائن الخلية:

# Correct
table.rows[0][0].text_frame.text = "Header"

# Wrong: AttributeError or silent failure
table.rows[0][0].text = "Header"

موضع الجدول خارج الشريحة

تحقق من x + sum(col_widths) <= 720 و y + sum(row_heights) <= 540 لشريحة قياسية.


الأسئلة المتكررة

هل يمكنني دمج خلايا الجدول؟

دمج الخلايا غير مدعوم في هذا الإصدار.

هل يمكنني تطبيق لون خلفية على كامل الجدول؟

تطبيق تنسيق التعبئة على كل خلية على حدة:

for row_idx in range(len(table.rows)):
    for col_idx in range(len(table.rows[row_idx])):
        cell = table.rows[row_idx][col_idx]
        cell.fill_format.fill_type = FillType.SOLID
        cell.fill_format.solid_fill_color.color = Color.from_argb(255, 240, 248, 255)

هل يمكنني تعيين أنماط حدود الخلية؟

يمكن الوصول إلى خصائص حدود الخلية من خلال خصائص table.rows[row][col].border_*. راجع مرجع API للحصول على القائمة الكاملة لسمات تنسيق الحدود.


انظر أيضًا

 العربية