Come lavorare con le tabelle in Python

Come lavorare con le tabelle in 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.

Guida passo-passo

Passo 1: Installa il pacchetto

pip install aspose-slides-foss

Passo 2: Crea o apri una presentazione

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)

Passo 3: Definisci le larghezze delle colonne e le altezze delle righe

Le tabelle richiedono larghezze di colonna e altezze di riga esplicite in punti (1 punto = 1/72 di pollice). Una diapositiva standard è larga 720 punti e alta 540 punti.

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

Passo 4: Aggiungi la tabella

slide.shapes.add_table(x, y, col_widths, row_heights) crea la tabella nella posizione (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)

Passo 5: Imposta il testo della cella

Accedi alle celle tramite table.rows[row_index][col_index] e assegna il testo tramite .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)

Passo 6: Formatta il testo della cella di intestazione

Applica la formattazione grassetto alle celle di intestazione usando 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)

Esempio completo funzionante

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

Problemi comuni e soluzioni

IndexError quando accedi a table.rows[row][col]

Gli indici di riga e colonna partono da zero. Se hai definito row_heights con 3 elementi, gli indici di riga validi sono 0, 1, 2.

Il testo della cella non appare nel file salvato

Assegna sempre tramite .text_frame.text, non tramite .text direttamente sull’oggetto cella:

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

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

La posizione della tabella è fuori dalla diapositiva

Verifica che x + sum(col_widths) <= 720 e y + sum(row_heights) <= 540 per una diapositiva standard.


Domande frequenti

Posso unire le celle della tabella?

L’unione delle celle non è supportata in questa edizione.

Posso applicare un colore di sfondo a tutta la tabella?

Applica la formattazione di riempimento a ciascuna cella 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)

Posso impostare gli stili del bordo delle celle?

Le proprietà del bordo della cella sono accessibili tramite table.rows[row][col].border_* proprietà. Consulta il riferimento API per l’elenco completo degli attributi di formattazione del bordo.


Vedi anche

 Italiano