Comment travailler avec les tableaux dans Python

Comment travailler avec les tableaux dans 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.

Guide étape par étape

Étape 1 : Installer le package

pip install aspose-slides-foss

Étape 2 : Créer ou ouvrir une présentation

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)

Étape 3 : Définir les largeurs des colonnes et les hauteurs des lignes

Les tables nécessitent des largeurs de colonnes et des hauteurs de lignes explicites en points (1 point = 1/72 pouce). Une diapositive standard mesure 720 points de large et 540 points de haut.

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

Étape 4 : Ajouter la table

slide.shapes.add_table(x, y, col_widths, row_heights) crée le tableau à la position (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)

Étape 5 : Définir le texte des cellules

Accédez aux cellules via table.rows[row_index][col_index] et attribuez du texte via .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)

Étape 6 : Formater le texte des cellules d’en-tête

Appliquez le format gras aux cellules d’en-tête en utilisant 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)

Exemple complet fonctionnel

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

Problèmes courants et solutions

IndexError lors de l’accès à table.rows[row][col]

Les indices de lignes et de colonnes commencent à zéro. Si vous avez défini row_heights avec 3 éléments, les indices de ligne valides sont 0, 1, 2.

Le texte de la cellule n’apparaît pas dans le fichier enregistré

Attribuez toujours via .text_frame.text, pas via .text directement sur l’objet cellule :

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

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

La position du tableau est hors de la diapositive

Vérifiez que x + sum(col_widths) <= 720 et y + sum(row_heights) <= 540 pour une diapositive standard.


Foire aux questions

Puis-je fusionner les cellules du tableau ?

La fusion des cellules n’est pas prise en charge dans cette édition.

Puis-je appliquer une couleur d’arrière-plan à l’ensemble du tableau ?

Appliquez le format de remplissage à chaque cellule individuelle :

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)

Puis-je définir les styles de bordure des cellules ?

Les propriétés de bordure de cellule sont accessibles via table.rows[row][col].border_* propriétés. Consultez la référence API pour la liste complète des attributs de format de bordure.


Voir aussi

 Français