在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

在 Python 中使用 Excel 创建甘特图

按照以下步骤使用 Aspose.Cells for .NET for Python 创建 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

    # 偏移和结束日期公式
    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)
在 Excel 中使用 Python 定制甘特图

使用 Python 自定义 Excel 中的甘特图

获取免费许可证

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

额外资源

想要探索更多吗?下面的链接将帮助您更深入地了解 Aspose.Cells for Python via .NET。无论您是在寻找详细的指南、API参考,还是免费的工具,这些资源都能满足您的需求。

最终的话

在 Excel 中使用 Python 创建甘特图通过 Aspose.Cells for .NET 非常简单且高效。它让您完全控制图表设计和 Excel 自动化。用您的项目数据尝试一下,看看差异。

如果您有任何问题,请随时通过我们的 free support forum 联系我们。

见也