在 Excel 中使用 Python 創建甘特圖

可視化任務在時間線上的安排有助於更好地管理項目。在這篇文章中,您將學習如何使用 Aspose.Cells for Python via .NET 在 Excel 中創建甘特圖。只需幾行代碼,您就可以將簡單的任務數據轉換為動態而清晰的可視化時間線,適合報告、儀表板和規劃文檔。我們一步步來看看。

這篇文章涵蓋以下主題:

Python Excel 函式庫用於甘特圖

Aspose.Cells for Python via .NET 是一個強大的庫,用於在 Python 中處理 Excel 文件。它允許您以編程方式創建、修改和格式化電子表格,包括甘特圖等圖表。

主要特點:

  • 完整控制 Excel 圖表和數據。
  • 支持 XLSX、XLS、CSV 和 PDF。
  • 高效能處理大型文件。
  • 豐富的圖表自訂選項。

要開始,請使用以下命令安裝庫:

pip install aspose-cells

你也可以從 releases 下載它。

堆疊條形圖的甘特圖

Excel 不提供內建的甘特圖類型,Aspose.Cells 也沒有。但您仍然可以使用堆疊條形圖配合一些格式化來創建一個。這是一種常見的技巧,Aspose.Cells 透過代碼完全支持它。

您可以使用 Aspose.Cells 做什麼

您可以通過以下方式輕鬆自動化 Excel 中的甘特圖:

  • 輸入任務數據(任務名稱、開始日期和持續時間)。
  • 插入一個堆疊條形圖。
  • 使用一個系列作為「開始偏移量」(不可見)和另一個作為「持續時間」(可見)。
  • 將圖表格式化為甘特圖。

這為您提供了一個專業外觀的時間軸,您可以動態生成。

Sample Task Data

這裡有一個我們將使用的示例表格:

任務開始日期持續時間開始偏移量
Task 12025-04-0130
Task 22025-04-0362
Task 32025-04-08107
Task 42025-04-18317
Task 52025-04-21520

在 Excel 中使用 Python 創建甘特圖

按照以下步驟使用 Aspose.Cells for Python via .NET 在 Excel 中創建甘特圖:

  • 使用 Workbook 類別載入現有的 Excel 數據文件。
  • 獲取第一個工作表,使用 workbook.worksheets[0]
  • 添加堆疊條形圖以增加甘特圖佈局。
  • 添加兩個數據系列:一個用於偏移量,另一個用於持續時間。
  • 將任務名稱設置為分類標籤。
  • 調整樣式和軸設定以格式化圖表。
  • 使用 workbook.save() 方法保存文件。

這是一段 Python 代碼片段,執行所有這些步驟:

import aspose.cells as cells
from aspose.pydrawing import Color

# 載入 Excel 檔案
workbook = cells.Workbook("sample-data.xlsx")
sheet = workbook.worksheets.get(0)

# 添加甘特圖
chart_index = sheet.charts.add(cells.charts.ChartType.BAR_STACKED, 7, 0, 30, 10)
chart = sheet.charts[chart_index]
chart.title.text = "Gantt Chart"

# 添加偏移量和持續時間作為系列
chart.n_series.add("D2:D6", True)  # Start Offset
chart.n_series.add("C2:C6", True)  # Duration

# 將任務名稱設為類別
chart.n_series.category_data = "A2:A6"

# 使偏移條不可見
chart.n_series[0].area.formatting = cells.charts.FormattingType.NONE

# 樣式持續時間條
chart.n_series[1].area.formatting = cells.charts.FormattingType.CUSTOM
chart.n_series[1].area.foreground_color = Color.steel_blue
chart.n_series[1].data_labels.show_value = True

# 軸設定
chart.category_axis.is_plot_order_reversed = True
chart.category_axis.title.text = "Tasks"
chart.value_axis.title.text = "Days from Start"
chart.value_axis.major_grid_lines.is_visible = True

# 隱藏圖例
chart.show_legend = False

# 調整圖表大小(選項)
chart.chart_object.width = 700
chart.chart_object.height = 400

# Save the result
workbook.save("GanttChartResult.xlsx", cells.SaveFormat.XLSX)

這將生成一個乾淨的甘特圖樣式圖表,包含您的任務數據。

在 Excel 中使用 Python 創建甘特圖

在 Excel 中使用 Python 創建甘特圖

自訂甘特圖

您可以使用以下可用選項自定義您的甘特圖:

條形顏色

為持續時間條設置單一顏色:

chart.n_series[1].area.foreground_color = Color.steel_blue

透明偏移量

將偏移(隱形)條的透明度設置為完全透明。

chart.n_series[0].area.formatting = cells.charts.FormattingType.NONE

任務訂單

反轉 Y 軸以從上到下顯示任務:

chart.category_axis.is_plot_order_reversed = True

數據標籤

在每個任務欄上直接顯示持續時間:

chart.n_series[1].data_labels.show_value = True

傳奇控制

移除或重新定位圖表圖例。

chart.show_legend = False

# Or reposition: 
chart.legend.position = cells.charts.LegendPositionType.BOTTOM

設定自定義條形顏色

chart.n_series[1].points[0].area.foreground_color = Color.green
chart.n_series[1].points[1].area.foreground_color = Color.red

調整圖表大小

chart.chart_object.width = 700
chart.chart_object.height = 400

導出為 PDF 或圖像

workbook.save("gantt_chart.pdf", cells.SaveFormat.PDF)
chart.to_image("chart.png")

以下的 Python 代碼片段應用了上述的一些自定義設置:

import aspose.cells as cells
from aspose.pydrawing import Color
import datetime

# 初始化工作簿和工作表
workbook = cells.Workbook()
sheet = workbook.worksheets.get(0)
sheet.name = "Gantt Data"

# 項目開始日期
project_start = datetime.date(2025, 4, 1)

# Headers
sheet.cells.get("A1").put_value("Task")
sheet.cells.get("B1").put_value("Start Date")
sheet.cells.get("C1").put_value("Duration (Days)")
sheet.cells.get("D1").put_value("Start Offset")
sheet.cells.get("E1").put_value("End Date")

# 任務數據: [任務名稱, 開始日期, 持續時間]
tasks = [
    ["Task 1", "2025-04-01", "3"],
    ["Task 2", "2025-04-03", "6"],
    ["Task 3", "2025-04-08", "10"],
    ["Task 4", "2025-04-18", "3"],
    ["Task 5", "2025-04-21", "5"]
]

# 填寫數據到表格中
for i, task in enumerate(tasks):
    row = i + 2  # Start from row 2
    sheet.cells.get(row, 0).put_value(task[0])  # Task Name
    sheet.cells.get(row, 1).put_value(datetime.datetime.strptime(task[1], "%Y-%m-%d").date())  # Start Date
    sheet.cells.get(row, 2).put_value(int(task[2]))  # Duration

    # Offset 和結束日期公式
    sheet.cells.get(row, 3).formula = f"=B{row + 1} - DATE(2025,4,1)"  # Offset
    sheet.cells.get(row, 4).formula = f"=B{row + 1} + C{row + 1}"  # End Date

# 自動調整列寬
sheet.auto_fit_columns()

# 添加甘特圖
chart_index = sheet.charts.add(cells.charts.ChartType.BAR_STACKED, 10, 0, 30, 10)
chart = sheet.charts[chart_index]
chart.title.text = "Project Gantt Chart"

# 新增數據系列:偏移量(隱藏)、持續時間(可見)
chart.n_series.add("D2:D6", True)  # Offset
chart.n_series.add("C2:C6", True)  # Duration

# 將任務名稱設為類別標籤
chart.n_series.category_data = "A2:A6"

# 讓偏移條隱形
chart.n_series[0].area.formatting = cells.charts.FormattingType.NONE

# 將每個任務欄的顏色設置為不同。
duration_series = chart.n_series[1]
for i in range(duration_series.points.count):
    red = 100 + i * 30
    duration_series.points[i].area.foreground_color = Color.from_argb(255, red, 150)

# 在持續時間條上顯示數據標籤
duration_series.data_labels.show_value = True

# 軸配置
chart.category_axis.title.text = "Tasks"
chart.category_axis.is_plot_order_reversed = True
chart.value_axis.title.text = "Days from Project Start"
chart.value_axis.major_grid_lines.is_visible = True
chart.value_axis.min_value = 0
chart.value_axis.major_unit = 5.0

# 隱藏圖例
chart.show_legend = False

# 調整圖表大小
chart.chart_object.width = 700
chart.chart_object.height = 400

# Save output
workbook.save("CustomizedGanttChart.xlsx", cells.SaveFormat.XLSX)
使用 Python 在 Excel 中自定義甘特圖

使用 Python 自訂 Excel 中的甘特圖

獲取免費許可證

您可以 request a free temporary license 以探索 Aspose.Cells 的全部功能,而無需任何限制或水印。

額外資源

想深入探索嗎?以下的連結將幫助您更深入了解 Aspose.Cells for Python via .NET。無論您是在尋找詳細的指南、API 參考還是免費工具,這些資源都能滿足您的需求。

最後的話

在 Excel 中使用 Python 創建甘特圖是簡單而有效的,通過 Aspose.Cells for .NET for Python。它賦予您對圖表設計和 Excel 自動化的完全控制。使用您的項目數據進行嘗試,看看不同之處。

如果您遇到任何問題,請隨時通過我們的 free support forum 聯繫我們。

另見