Pourquoi créer des graphiques de façon programmatique ?

Les pipelines de reporting automatisés ont souvent besoin de graphiques intégrés dans des classeurs Excel, comme des résumés trimestriels, des tableaux de bord de résultats d’IA, ou des indicateurs opérationnels. Le faire sans Microsoft Excel signifie aucun coût de licence et aucune interaction avec une interface graphique.

Aspose.Cells FOSS for Python fournit une API de graphiques propre et Pythonique : une méthode par type de graphique, une chaîne de caractères simple pour le titre, et une configuration de séries basée sur des arguments nommés. L’API complète est présentée ci‑dessous.


Installation

pip install aspose-cells-foss

Importez les classes dont vous avez besoin :

from aspose.cells_foss import Workbook, Cell

Les graphiques sont accessibles via ws.charts; aucune importation de module de graphique séparée n’est requise.


L’API de graphiques en un coup d’œil

Ce que vous voulezComment le faire
Ajouter un graphique en colonnesws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Ajouter un graphique en lignesws.charts.add_line(top_row, left_col, bottom_row, right_col)
Ajouter un graphique à barresws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Ajouter un graphique circulairews.charts.add_pie(top_row, left_col, bottom_row, right_col)
Définir le titrechart.title = "My Chart" (chaîne simple ; pas .title.text)
Définir les catégories de l’axe des xchart.category_data = "A2:A6"
Ajouter une série nomméechart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Afficher la légendechart.show_legend = True
Définir la position de la légendechart.legend_position = "bottom"

Tous les indices de lignes et de colonnes sont à base zéro. Le add_* les méthodes renvoient le Chart objet directement (pas un indice).


Graphique en colonnes : étape par étape

Construisons un graphique en colonnes affichant les revenus et dépenses trimestriels.

Étape 1 : créez le classeur et écrivez les données

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

##Data
quarters = ["Q1", "Q2", "Q3", "Q4"]
revenue  = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

for i, (q, r, e) in enumerate(zip(quarters, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

Étape 2 : ajoutez le graphique

Placez le graphique sous les données (ligne 7 et suivantes, couvrant les colonnes 0‑8) :

chart = ws.charts.add_bar(6, 0, 22, 8)

Étape 3 : configurez le titre et la légende

chart.title = "Quarterly Revenue vs Expenses"
chart.show_legend = True
chart.legend_position = "bottom"

Étape 4 : Ajouter des séries de données

Chaque série nécessite une plage de valeurs, une plage de catégories et un nom :

chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

Étape 5 : Enregistrer

wb.save("quarterly_report.xlsx")
print("Chart saved to quarterly_report.xlsx")

Exemple complet en un seul bloc :

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

##Data
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

data = [("Q1", 50000, 32000), ("Q2", 62000, 38000),
        ("Q3", 71000, 41000), ("Q4", 89000, 47000)]
for i, (q, r, e) in enumerate(data, start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Quarterly Revenue vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

wb.save("quarterly_report.xlsx")

Graphique en ligne : tendance mensuelle

Le même modèle fonctionne pour add_line():

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]

months  = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
actuals = [42000, 47500, 53000, 49000, 61000, 68000]
targets = [45000, 45000, 50000, 55000, 60000, 65000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Actual"
ws.cells["C1"].value = "Target"

for i, (m, a, t) in enumerate(zip(months, actuals, targets), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = a
    ws.cells[f"C{i}"].value = t

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue: Actual vs Target"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Actual")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Target")
chart.show_legend = True
chart.legend_position = "right"

wb.save("monthly_trend.xlsx")

Diagramme circulaire : part de marché

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]

segments = ["Product A", "Product B", "Product C", "Product D"]
shares   = [40, 25, 20, 15]

ws.cells["A1"].value = "Segment"
ws.cells["B1"].value = "Share %"
for i, (s, v) in enumerate(zip(segments, shares), start=2):
    ws.cells[f"A{i}"].value = s
    ws.cells[f"B{i}"].value = v

chart = ws.charts.add_pie(6, 0, 20, 7)
chart.title = "Market Share by Product"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Share")
chart.show_legend = True
chart.legend_position = "right"

wb.save("market_share.xlsx")

Erreurs courantes à éviter

IncorrectDroite
ws.charts.add(ChartType.COLUMN, 5, 0, 15, 5)ws.charts.add_bar(5, 0, 15, 5)
chart.title.text = "Revenue"chart.title = "Revenue"
chart.n_series.add("B2:B5", True) (positionnel)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeNon nécessaire ; utilisez ws.charts.add_bar() directement
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (niveau du graphique)

Ressources