Bootstrap

基于Excel项目计划生成Gantt甘特图 - Python源码

1.什么是甘特图?


Gantt甘特图是一种用于项目管理的工具,以条形图的形式展示项目任务的时间安排。每个任务在图表上用一个水平条表示,条的长度和位置反映了任务的开始时间、持续时间和结束时间。甘特图通常包括以下元素:

任务名称:列出所有需要完成的任务。
时间轴:通常位于图表的顶部或底部,显示项目的时间范围。
进度条:显示每个任务的完成状态。

2.甘特图有哪些好处?


清晰的可视化:甘特图提供了项目任务的直观视图,使团队成员和利益相关者能够快速理解项目进度和时间安排。
任务管理:通过明确每个任务的起止时间和持续时间,项目经理可以更好地规划和分配资源。
进度跟踪:可以轻松识别项目的滞后任务,及时调整计划,确保项目按时完成。
促进沟通:甘特图为团队成员提供了共同的参考框架,促进了沟通和协作。
提高效率:通过可视化的时间安排和任务依赖关系,团队可以更有效地管理工作流程,减少重复和混乱。
风险管理:识别关键路径和任务之间的依赖关系,有助于提前发现潜在风险并制定应对策略。

3.有哪些好用的甘特图绘制工具?

  • 常用的甘特图工具

    • Excel 手绘

    • Microsoft Project 自动生成甘特图

    • 腾讯文档智能表格自动生成甘特图

  • 免费的甘特图绘制工具

    • GanttProject

      • 一个开源桌面应用程序,专注于创建和管理甘特图,适合小型项目。

    • TeamGantt

      • 提供免费版本,适合小型团队,支持简单的甘特图创建和协作功能。

    • ClickUp

      • 提供免费计划,包含甘特图视图,适合任务和项目管理。

    • Trello

      • 虽然本身不是甘特图工具,但可以通过插件(如Planyway)实现甘特图功能,基本功能免费。

    • Airtable

      • 提供免费套餐,支持甘特图视图,适合数据管理和项目可视化。

    • OpenProject

      • 开源项目管理工具,提供甘特图功能,适合团队协作和项目跟踪。

    • Bitrix24

      • 提供免费版本,包含甘特图功能,适合小型团队进行项目管理。

    • Google Sheets

      • 可以使用模板或自行创建甘特图,灵活且免费,适合简单项目管理。

    • Python源码直接绘制

      • 效果​​​​​​​

      • Python源码

        • ​​​​​​​输入表格必须包含字段(列):开始日期,结束日期,状态

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 定义颜色填充映射
status_to_color = {
    '开放': '808080',      # 灰色
    '处理中': 'ADD8E6',    # 浅蓝色
    '完成': '90EE90',      # 浅绿色
    '已关闭': '008000'     # 绿色
}

def create_gantt_chart(input_excel, sheet_name):
    # 读取 Excel 数据
    df = pd.read_excel(input_excel, sheet_name=sheet_name)

    # 转换日期列为 datetime 类型
    df['开始日期'] = pd.to_datetime(df['开始日期'])
    df['结束日期'] = pd.to_datetime(df['结束日期'])

    # 获取开始和结束时间的范围
    date_range = pd.date_range(start=df['开始日期'].min(), end=df['结束日期'].max())

    # 将日期列添加到 DataFrame 中
    date_df = pd.DataFrame([{date.strftime('%m-%d'): 1 if row['开始日期'] <= date <= row['结束日期'] else None for date in date_range} for _, row in df.iterrows()])
    gantt_data = pd.concat([df, date_df], axis=1)

    # 打开 Excel 文件
    wb = load_workbook(input_excel)
    ws = wb[sheet_name]

    # 查找数据的起始行和列
    start_row = ws.max_row + 1
    start_col = 12

    # 将新数据插入到工作表中
    for index, row in gantt_data.iterrows():
        for col_num, value in enumerate(row, 1):
            ws.cell(row=start_row + index, column=col_num).value = value

    # 对生成的内容进行颜色标记
    for row_num, row in enumerate(ws.iter_rows(min_row=start_row + 1, max_col=start_col + len(date_range), max_row=start_row + len(df)), start=start_row + 1):
        status = row[5].value  # 获取状态列的值
        fill_color = status_to_color.get(status)
        fill = PatternFill(start_color=fill_color, end_color=fill_color, fill_type="solid")

        # 对日期范围进行颜色填充
        for cell in row[start_col:]:
            if cell.value == 1:
                cell.fill = fill
                cell.value = ""  # 清除标记值

    # 保存带颜色标记的 Excel 文件
    wb.save(input_excel)
    print(f'甘特图成功添加并保存至 {input_excel}')

# 输入文件和表格名称
input_excel = '所有项目研发计划.xlsx'
sheet_name = '重点项目xxx'

create_gantt_chart(input_excel, sheet_name)

;