Mengapa Membina Carta Secara Programatik?

Saluran laporan automatik selalunya memerlukan carta yang disematkan dalam buku kerja Excel, seperti ringkasan suku tahunan, papan pemuka hasil ML, atau metrik operasi. Melakukan ini tanpa Microsoft Excel bermakna tiada kos lesen dan tiada interaksi GUI.

Aspose.Cells FOSS for Python menyediakan API carta yang bersih dan Pythonik: satu kaedah bagi setiap jenis carta, rentetan biasa untuk tajuk, dan konfigurasi siri berasaskan argumen kata kunci. Keseluruhan API dibincangkan di bawah.


Pasang

pip install aspose-cells-foss

Import kelas yang anda perlukan:

from aspose.cells_foss import Workbook, Cell

Carta diakses melalui ws.charts; tiada import modul carta berasingan diperlukan.


API Carta Secara Sekilas

Apa yang anda mahuCara melakukannya
Tambah carta lajurws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Tambah carta garisanws.charts.add_line(top_row, left_col, bottom_row, right_col)
Tambah carta barws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Tambah carta paiws.charts.add_pie(top_row, left_col, bottom_row, right_col)
Tetapkan tajukchart.title = "My Chart" (rentetan biasa; bukan .title.text)
Tetapkan kategori paksi-xchart.category_data = "A2:A6"
Tambah siri bernamachart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Tunjukkan legendachart.show_legend = True
Tetapkan kedudukan legendachart.legend_position = "bottom"

Semua indeks baris dan lajur adalah berdasarkan sifar. Kaedah add_* kaedah mengembalikan Chart objek secara langsung (bukan indeks).


Carta Lajur: Langkah demi Langkah

Mari bina carta lajur yang menunjukkan pendapatan dan perbelanjaan suku tahunan.

Langkah 1: Cipta buku kerja dan tulis data

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

Langkah 2: Tambah carta

Letakkan carta di bawah data (baris 7 ke atas, meliputi lajur 0-8):

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

Langkah 3: Konfigurasikan tajuk dan legenda

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

Langkah 4: Tambah siri data

Setiap siri memerlukan julat nilai, julat kategori, dan nama:

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

Langkah 5: Simpan

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

Contoh penuh dalam satu blok:

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

Carta Garis: Trend Bulanan

Corak yang sama berfungsi untuk 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")

Carta Pai: Bahagian Pasaran

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

Kesilapan Biasa yang Perlu Dielakkan

SalahBetul
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) (posisional)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeTidak diperlukan; gunakan ws.charts.add_bar() secara langsung
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (aras carta)

Sumber