Learn how to Create Gantt Chart in Excel using Python
Created
July 15, 2025 09:11
-
-
Save aspose-com-gists/6c656df29499891802b7262fc159fb3d to your computer and use it in GitHub Desktop.
Create Gantt Chart in Excel using Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment