Cum să lucrați cu tabele în Python

Cum să lucrați cu tabele în Python

Aspose.Slides FOSS for Python supports creating tables on slides with configurable column widths and row heights. This guide shows how to add a table, populate it with data, and apply basic text formatting to cells.

Ghid pas cu pas

Pasul 1: Instalați pachetul

pip install aspose-slides-foss

Pasul 2: Creați sau deschideți o prezentare

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)

Pasul 3: Definiți lățimile coloanelor și înălțimile rândurilor

Tabelele necesită lățimi de coloană și înălțimi de rând explicite, exprimate în puncte (1 punct = 1/72 inch). Un diapozitiv standard are 720 de puncte lățime și 540 de puncte înălțime.

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

Pasul 4: Adăugați tabelul

slide.shapes.add_table(x, y, col_widths, row_heights) creează tabelul la poziția (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)

Pasul 5: Setează textul celulei

Accesează celulele prin table.rows[row_index][col_index] și atribuie text prin .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)

Pasul 6: Formatați textul celulei de antet

Aplică formatare îngroșată celulelor de antet utilizând 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)

Exemplu complet funcțional

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

Probleme comune și soluții

IndexError când accesezi table.rows[row][col]

Indicele rândului și al coloanei pornesc de la zero. Dacă ai definit row_heights cu 3 elemente, indicii de rând valizi sunt 0, 1, 2.

Textul celulei nu apare în fișierul salvat

Atribuie întotdeauna prin .text_frame.text, nu prin .text direct pe obiectul celulei:

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

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

Poziția tabelului este în afara diapozitivului

Verifică că x + sum(col_widths) <= 720 și y + sum(row_heights) <= 540 pentru un diapozitiv standard.


Întrebări frecvente

Pot să îmbin celulele tabelului?

Îmbinarea celulelor nu este suportată în această ediție.

Pot să aplic o culoare de fundal pentru întregul tabel?

Aplicați formatarea de umplere fiecărei celule individuale:

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)

Pot să setez stilurile de bordură ale celulei?

Proprietățile de bordură ale celulei sunt accesibile prin table.rows[row][col].border_* proprietăți. Consultați referința API pentru lista completă a atributelor de format ale bordurii.


Vezi și

 Română