Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save aspose-com-gists/6c656df29499891802b7262fc159fb3d to your computer and use it in GitHub Desktop.
Save aspose-com-gists/6c656df29499891802b7262fc159fb3d to your computer and use it in GitHub Desktop.
Create Gantt Chart in Excel using 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)
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