Mengapa Membuat Diagram Secara Programatis?

Pipeline pelaporan otomatis sering membutuhkan diagram yang disematkan dalam workbook Excel, seperti ringkasan kuartalan, dasbor hasil ML, atau metrik operasional. Melakukan ini tanpa Microsoft Excel berarti tidak ada biaya lisensi dan tidak ada interaksi GUI.

Aspose.Cells FOSS for Python menyediakan API chart yang bersih dan Pythonic: satu metode per tipe chart, string biasa untuk judul, dan konfigurasi seri berbasis argumen kata kunci. Seluruh API dijelaskan di bawah ini.


Instal

pip install aspose-cells-foss

Impor kelas yang Anda butuhkan:

from aspose.cells_foss import Workbook, Cell

Chart diakses melalui ws.charts; tidak diperlukan impor modul chart terpisah.


API Chart Sekilas

Apa yang Anda inginkanCara melakukannya
Tambahkan chart kolomws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Tambahkan chart garisws.charts.add_line(top_row, left_col, bottom_row, right_col)
Tambahkan chart batangws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Tambahkan chart lingkaranws.charts.add_pie(top_row, left_col, bottom_row, right_col)
Atur judulchart.title = "My Chart" (string biasa; bukan .title.text)
Atur kategori sumbu xchart.category_data = "A2:A6"
Tambahkan seri bernamachart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Tampilkan legendachart.show_legend = True
Atur posisi legendachart.legend_position = "bottom"

Semua indeks baris dan kolom adalah berbasis nol. The add_* metode mengembalikan Chart objek secara langsung (bukan indeks).


Diagram Kolom: Langkah demi Langkah

Mari buat diagram kolom yang menampilkan pendapatan dan pengeluaran kuartalan.

Langkah 1: Buat workbook 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: Tambahkan diagram

Posisikan diagram di bawah data (baris 7 ke bawah, mencakup kolom 0-8):

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

Langkah 3: Konfigurasikan judul dan legenda

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

Langkah 4: Tambahkan seri data

Setiap seri memerlukan rentang nilai, rentang kategori, dan sebuah 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 lengkap 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")

Diagram Garis: Tren Bulanan

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

Diagram Lingkaran: Pangsa Pasar

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

Kesalahan Umum yang Harus Dihindari

SalahBenar
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() langsung
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (tingkat bagan)

Sumber Daya