Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图

时间轴上的任务可视化有助于更好地管理项目。本文将学习如何使用***Aspose.Cells**for Python 通过 .NET*在 Excel 中创建甘特图。只需几行代码,即可将简单的任务数据转换为动态清晰的可视化时间轴,非常适合用于报表、仪表板和规划文档。

Aspose.Cells官方试用版免费下载

用于甘特图的 Python Excel 库

Aspose.Cells for Python via .NET是一个功能强大的库,用于在 Python 中处理 Excel 文件。它允许您以编程方式创建、修改和格式化电子表格,包括甘特图等图表。

主要特点:

  • 完全控制 Excel 图表和数据。
  • 支持 XLSX、XLS、CSV 和 PDF。
  • 大文件时具有高性能。
  • 丰富的图表自定义选项。

首先,请使用以下命令安装该库:

复制代码
pip install aspose-cells

您也可以从发布版本中下载它。

甘特图与堆叠条形图

Excel 和 Aspose.Cells 均未提供内置甘特图类型。但您仍然可以使用堆叠条形图 并进行一些格式设置来创建甘特图。这是一种常用技术,Aspose.Cells 完全通过代码支持该技术。

Aspose.Cells 的功能

您可以通过执行以下操作轻松地在 Excel 中自动执行甘特图:

  • 输入任务数据(任务名称、开始日期和持续时间)。
  • 插入堆积条形图。
  • 使用一个系列作为"起始偏移量"(不可见),使用另一个系列作为"持续时间"(可见)。
  • 将图表格式化为甘特图。

这为您提供了一个可以动态生成的专业时间线。

示例任务数据

这是我们将使用的示例表:

任务 开始日期 期间 起始偏移
任务 1 2025年4月1日 3 0
任务 2 2025年4月3日 6 2
任务 3 2025年4月8日 10 7
任务 4 2025年4月18日 3 17
任务 5 2025年4月21日 5 20

使用 Python 在 Excel 中创建甘特图

按照以下步骤通过 .NET 使用 Aspose.Cells for Python 在 Excel 中创建甘特图:

  • 使用该类加载现有的 Excel 数据文件Workbook。
  • 获取第一个工作表workbook.worksheets[0]。
  • 添加堆积条形图以添加甘特图布局。
  • 添加两个数据系列:一个用于偏移量,一个用于持续时间。
  • 将任务名称设置为类别标签。
  • 调整样式和轴设置来格式化图表。
  • 使用该方法保存文件workbook.save()。

以下是执行所有这些步骤的 Python 代码片段:

复制代码
import aspose.cells as cells
from aspose.pydrawing import Color

# Load the Excel file
workbook = cells.Workbook("sample-data.xlsx")
sheet = workbook.worksheets.get(0)

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

# Add offset and duration as series
chart.n_series.add("D2:D6", True)  # Start Offset
chart.n_series.add("C2:C6", True)  # Duration

# Set task names as categories
chart.n_series.category_data = "A2:A6"

# Make offset bars invisible
chart.n_series[0].area.formatting = cells.charts.FormattingType.NONE

# Style duration bars
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

# Axis settings
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

# Hide legend
chart.show_legend = False

# Resize chart (optional)
chart.chart_object.width = 700
chart.chart_object.height = 400

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

这将生成包含您的任务数据的干净的甘特图。

自定义甘特图

您可以使用以下可用选项自定义甘特图:

条形颜色

为持续时间条设置纯色:

复制代码
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

# Initialize workbook and worksheet
workbook = cells.Workbook()
sheet = workbook.worksheets.get(0)
sheet.name = "Gantt Data"

# Project start date
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")

# Task data: [Task Name, Start Date, Duration]
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"]
]

# Fill data into the sheet
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 and End Date formulas
    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

# Auto-fit columns
sheet.auto_fit_columns()

# Add Gantt chart
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"

# Add data series: Offset (invisible), Duration (visible)
chart.n_series.add("D2:D6", True)  # Offset
chart.n_series.add("C2:C6", True)  # Duration

# Set task names as category labels
chart.n_series.category_data = "A2:A6"

# Make offset bars invisible
chart.n_series[0].area.formatting = cells.charts.FormattingType.NONE

# Color each task bar differently
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)

# Show data labels on duration bars
duration_series.data_labels.show_value = True

# Axis configuration
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

# Hide legend
chart.show_legend = False

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

# Save output
workbook.save("CustomizedGanttChart.xlsx", cells.SaveFormat.XLSX)

总结

使用**Aspose.Cells**for Python 通过 .NET 在 Excel 中创建甘特图既简单又高效。它让您可以完全控制图表设计和 Excel 自动化。

相关推荐
墨尘游子几秒前
一文读懂循环神经网络—从零实现长短期记忆网络(LSTM)
人工智能·python·深度学习·神经网络·算法·机器学习·lstm
大模型真好玩39 分钟前
深入浅出LangChain AI Agent智能体开发教程(二)—LangChain接入大模型
人工智能·python·ai编程
站大爷IP1 小时前
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
python
qq_三哥啊2 小时前
【python】sys.executable、sys.argv、Path(__file__) 在PyInstaller打包前后的区别
开发语言·python
三天不学习3 小时前
Python 进阶学习之全栈开发学习路线
开发语言·python·学习
曲幽3 小时前
Python字符串处理技巧全解析
python·split·replace·find·str·getstring
都叫我大帅哥5 小时前
Python中的Annotated:不只是类型提示的装饰
python
abort();5 小时前
Iterable:一个容易被忽视的Python编码细节
python
MC皮蛋侠客5 小时前
Python与MongoDB深度整合:异步操作与GridFS实战指南
开发语言·python·mongodb
这里有鱼汤5 小时前
Python菜鸟如何用AI写出高质量代码?这6招我亲测有效!
后端·python