Kodėl kurti diagramas programiškai?

Automatizuotos ataskaitų konvejeriai dažnai reikalauja diagramų, įterptų į Excel darbaknyges, pvz., ketvirčio santraukų, mašininio mokymosi rezultatų prietaisų skydelių arba operacinių metrikų. Tai atlikti be Microsoft Excel reiškia, kad nėra licencijavimo išlaidų ir nėra grafinės vartotojo sąsajos sąveikos.

Aspose.Cells FOSS for Python teikia švarią, Python‑panašią diagramų API: po vieną metodą kiekvienam diagramų tipui, paprastą eilutę pavadinimui ir raktinių argumentų pagrindu veikiančią serijų konfigūraciją. Visa API aprašyta žemiau.


Įdiegti

pip install aspose-cells-foss

Importuokite reikiamas klases:

from aspose.cells_foss import Workbook, Cell

Diagramoms prieiga vyksta per ws.charts; nereikia atskirai importuoti diagramų modulio.


Diagramų API iš pirmo žvilgsnio

Ko noriteKaip tai padaryti
Pridėti stulpelinę diagramąws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Pridėti linijinę diagramąws.charts.add_line(top_row, left_col, bottom_row, right_col)
Pridėti juostinę diagramąws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Pridėti skritulinę diagramąws.charts.add_pie(top_row, left_col, bottom_row, right_col)
Nustatyti pavadinimąchart.title = "My Chart" (paprasta eilutė; ne .title.text)
Nustatyti x ašies kategorijaschart.category_data = "A2:A6"
Pridėti pavadintą serijąchart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Rodyti legendąchart.show_legend = True
Nustatyti legendos pozicijąchart.legend_position = "bottom"

Visi eilučių ir stulpelių indeksai yra nulio pagrindo. Ši add_* metodai grąžina Chart objektą tiesiogiai (ne indeksą).


Stulpelinė diagrama: Žingsnis po žingsnio

Sukurkime stulpelinę diagramą, rodantį ketvirčio pajamas ir išlaidas.

Žingsnis 1: Sukurkite darbaknygę ir įrašykite duomenis

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

Žingsnis 2: Pridėkite diagramą

Padėkite diagramą po duomenimis (nuo eilutės 7, apimant stulpelius 0‑8):

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

Žingsnis 3: Konfigūruokite pavadinimą ir legendą

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

4 žingsnis: Pridėti duomenų serijas

Kiekvienai serijai reikia reikšmių intervalo, kategorijų intervalo ir pavadinimo:

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

5 žingsnis: Išsaugoti

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

Pilnas pavyzdys viename bloke:

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

Linijinė diagrama: Mėnesinis trendas

Tas pats šablonas veikia 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")

Skritulinė diagrama: Rinkos dalis

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

Dažnos klaidos, kurių reikia vengti

NeteisingaTeisinga
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) (pozicinis)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeNereikia; naudokite ws.charts.add_bar() tiesiogiai
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (diagramos lygis)

Ištekliai