למה לבנות תרשימים באופן תכנותי?
צינורות דיווח אוטומטיים לעיתים קרובות זקוקים לתרשימים משולבים בחוברות Excel, כגון סיכומי רבעון, לוחות מחוונים של תוצאות למידת מכונה, או מדדי תפעול. ביצוע זאת ללא Microsoft Excel משמעותו ללא עלות רישוי וללא אינטראקציית GUI.
Aspose.Cells FOSS for Python מספק API גרפים נקי ופייתוני: שיטה אחת לכל סוג גרף, מחרוזת פשוטה לכותרת, וקונפיגורציית סדרות מבוססת ארגומנטים בשם. ה‑API המלא מתואר להלן.
התקנה
pip install aspose-cells-foss
ייבא את המחלקות שאתה צריך:
from aspose.cells_foss import Workbook, Cell
ניתן לגשת לגרפים דרך ws.charts; אין צורך בייבוא מודול גרפים נפרד.
מבט כולל על API התרשימים
| מה שאתה רוצה | איך לעשות זאת |
|---|---|
| הוסף גרף עמודות | ws.charts.add_bar(top_row, left_col, bottom_row, right_col) |
| הוסף גרף קו | ws.charts.add_line(top_row, left_col, bottom_row, right_col) |
| הוסף גרף פסים | ws.charts.add_bar(top_row, left_col, bottom_row, right_col) |
| הוסף גרף עוגה | ws.charts.add_pie(top_row, left_col, bottom_row, right_col) |
| הגדר את הכותרת | chart.title = "My Chart" (מחרוזת פשוטה; לא .title.text) |
| הגדר קטגוריות ציר X | chart.category_data = "A2:A6" |
| הוסף סדרה בשם | chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue") |
| הצג מקרא | chart.show_legend = True |
| הגדר מיקום מקרא | chart.legend_position = "bottom" |
כל האינדקסים של שורות ועמודות הם מתחיל מאפס. ה add_* המתודות מחזירות את Chart אובייקט ישירות (לא אינדקס).
תרשים עמודות: שלב אחרי שלב
בואו נבנה תרשים עמודות המציג הכנסות והוצאות רבעוניות.
שלב 1: צור את חוברת העבודה וכתוב נתונים
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
שלב 2: הוסף את התרשים
מקם את התרשים מתחת לנתונים (שורה 7 והלאה, משתרע על העמודות 0-8):
chart = ws.charts.add_bar(6, 0, 22, 8)
שלב 3: הגדר כותרת ומקרא
chart.title = "Quarterly Revenue vs Expenses"
chart.show_legend = True
chart.legend_position = "bottom"
שלב 4: הוסף סדרת נתונים
כל סדרה דורשת טווח ערכים, טווח קטגוריות, ושם:
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: שמור
wb.save("quarterly_report.xlsx")
print("Chart saved to quarterly_report.xlsx")
דוגמה מלאה בחלק אחד:
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")
תרשים קו: מגמה חודשית
הדפוס הזה עובד עבור 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")
תרשים עוגה: נתח שוק
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")
טעויות נפוצות להימנע מהן
| שגוי | נכון |
|---|---|
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) (מקומי) | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") |
from aspose.cells.charts import ChartType | לא נדרש; השתמש ב ws.charts.add_bar() בישירות |
chart.n_series.category_data = "A2:A5" | chart.category_data = "A2:A5" (רמת גרף) |