Google 表格做甘特图:三种方法
Google 表格里做甘特图有三条路,差别比想象中大:一个图表技巧、一个原生的时间轴视图,以及一种完全不用图表的做法。
先说一句:公式在哪都一样
下面所有公式在中文界面的 Google 表格里函数名依然是英文——WORKDAY、MAX、SPARKLINE 照写,参数之间用半角逗号。国内访问 Google 表格需要相应的网络条件,很多团队实际用的是腾讯文档在线表格或飞书多维表格;这两者的堆积条形图做法、辅助列思路和下面完全一致,公式也基本可以直接搬,菜单名略有差别而已。
方法一:堆积条形图
原理与 Excel 相同,菜单不同。表里放任务、开始日期、结束日期三列,再加两列计算列——偏移量(本任务比项目最早日期晚几天)用 =B2-$B$2,横条长度用 =C2-B2+1。那个 +1 是把结束当天也算进去;漏掉它,当天开始当天结束的任务长度为零,根本画不出横条。
两列都要用格式 › 数字 › 数字改成纯数字,这是最多人漏掉的一步——留成日期格式,表格会去画两个巨大的序列号,横条直接跑到右边界外面不见了。
- 按住 Ctrl 选中任务、偏移量、横条长度三列(A、D、E,不相邻的列要按住 Ctrl 点选)。
- 点插入 › 图表,在右侧图表编辑器里把图表类型设为堆积条形图。
- 到自定义 › 系列里选中偏移量系列,把填充颜色设为无。占位段消失,工期横条浮到正确位置。
- 在自定义 › 纵轴里勾选反转轴顺序,第一项任务回到顶部。
- 给工期系列换色、加图表标题,把横轴整理成看得懂的日期或天数。
这是真正的图表对象,可以调整大小、改样式、复制进 Google 文档或幻灯片,也能下载成图片。但要加里程碑或按阶段分组,就意味着更多辅助列和更多手工维护——真实项目做到这一步,这种方法开始变得沉重。
方法二:原生时间轴视图
时间轴视图是在表格里拿到甘特图布局最快的路子,而且是内置的,一条公式都不用写。
- 把数据整理成一张简单的表,至少要有卡片标题、开始日期、结束日期(或工期)三列。可选的负责人、分组、完成度列会显示在卡片详情里。
- 连表头一起选中整个区域。
- 点插入 › 时间轴,在对话框里确认数据区域后点创建。
- 表格会新建一个时间轴标签页,在右侧设置面板里逐项映射:卡片标题、开始日期、结束日期、卡片颜色、分组依据。
缩放可在天、周、月、季度、年之间切换,可以拖动滚屏,点卡片能跳回源数据那一行。做路线图确实好用。但要注意:时间轴是一个绑定源表的交互式视图,不是能当图片插进幻灯片的图表对象,也没有依赖关系连线和关键路径高亮。
一个完整算例:六项任务,然后来一次延误
辅助列讲起来容易,写错也容易,而且错得很不显眼。下面是一份带真实公式的小计划,然后改一个数——因为日期一动这张表会怎么样,是唯一有意义的检验。
这张表。一个教育机构官网重构项目,2026 年 3 月 2 日(周一)启动。第 1 行表头,任务在第 2—7 行。A 任务、B 开始、C 结束、D 工作日、E 偏移量、F 横条长度。法定节假日放在 H2:H5:清明补假 4 月 6 日,劳动节 5 月 1 日、5 月 4 日、5 月 5 日。只有 D 列是手工输入的:
- C2 ——
=WORKDAY(B2,D2-1,$H$2:$H$5)。表格里的WORKDAY和 Excel 一样,会替你跳过周末,第三个参数用来跳过节假日。那个-1不能省:WORKDAY从开始日向前数,周一算起的五个工作日是WORKDAY(周一,4),也就是周五。 - B3 ——
=WORKDAY(C2,1,$H$2:$H$5),前置任务结束之后的下一个工作日。整个文件里唯一会"重排"的东西就是它。 - E2 ——
=B2-$B$2,格式设为数字。第一项任务是 0。 - F2 ——
=C2-B2+1,格式设为数字。注意它不是 D2。D 是工作日,图表横轴是自然日,所以 10 个工作日的任务必须画成 12 格长。误把 D 拿去作图,每条横条都会提前结束,而旁边那张表读起来还完全正确。
向下填充,得到:
| 行 | 任务 | B — 开始 | C — 结束 | D — 工作日 | E — 偏移量 | F — 横条长度 |
|---|---|---|---|---|---|---|
| 2 | 需求调研 | 3 月 2 日(周一) | 3 月 13 日(周五) | 10 | 0 | 12 |
| 3 | 设计 | 3 月 16 日(周一) | 3 月 27 日(周五) | 10 | 14 | 12 |
| 4 | 开发 | 3 月 30 日(周一) | 4 月 27 日(周一) | 20 | 28 | 29 |
| 5 | 内容迁移 | 4 月 28 日(周二) | 5 月 21 日(周四) | 15 | 57 | 24 |
| 6 | 测试 | 5 月 22 日(周五) | 6 月 4 日(周四) | 10 | 81 | 14 |
| 7 | 上线 | 6 月 5 日(周五) | 6 月 5 日(周五) | 1 | 95 | 1 |
拿最后一行做校验:95 + 1 = 96,正好是 3 月 2 日到 6 月 5 日的完整跨度。如果末行的 E + F 不等于你预期的天数,说明上面某处的约定跑偏了。
顺带看第 4、5 行:20 个工作日画成 29 格,15 个工作日画成 24 格。多出来的不只是周末,还有清明和劳动节。H2:H5 空着的话,这两行都会提前完成,而误差一路传到上线日。调休上班的周六 WORKDAY 处理不了,只能把那项任务的工作日数手工减一天,并在旁边写一行注释说明为什么。
现在改一个数。设计超期三天:把 D3 从 10 改成 13。WORKDAY 链条重算,后面全跟着动——设计 4 月 1 日结束,开发 4 月 2 日至 4 月 30 日,内容迁移 5 月 6 日至 5 月 26 日,测试 5 月 27 日至 6 月 9 日,上线变成 6 月 10 日。两列辅助列自己跟着更新。这就是要用公式而不是硬敲日期的理由。
下面是不会跟着动的部分。
- 插入的行是空的。在设计和开发之间插入"客户评审":新的第 4 行没有任何公式,而原来的开发行——现在是第 5 行——仍然指着设计的结束日期。表格照样把图表区域扩大,于是那一空行在最左端画出一条零长度横条,看起来像渲染错误,而不像一处排程错误。
- 排序会毁掉整条链。按开始日期排一次序,每个相对引用都跟着它的新邻居走,悄悄从错误的行推导日期。没有警告,存盘关闭之后也撤销不回来。
- 第二个前置任务没地方放。如果测试同时要等开发和内容迁移,正确写法是
=WORKDAY(MAX(C4,C5),1,$H$2:$H$5)。它能跑。但图上看不到任何连线,而加一个五天的客户评审就变成=WORKDAY(C3,1+5,$H$2:$H$5)——一个光秃秃的5埋在公式里,没有任何标注。
一个只有表格才有的捷径。如果你只想每行有一条横条、连图表对象都不要,在 G2 写下面这条再向下填充:=SPARKLINE({E2,F2},{"charttype","bar";"color1","white";"color2","#6c4cf1";"max",96})。它在单个单元格内部重现了同一个"透明占位段"的把戏,而因为 max 固定为项目总跨度 96 天,每一行共用同一条坐标轴。它比图表更扛得住插行和重新排序——但它仍然是一张画,不是一份进度计划。
方法三:条件格式
不用图表:顶部横排一行日期,一天一列或一周一列,左边保留任务和起止日期,选中整片网格后走格式 › 条件格式 › 自定义公式,写成 =AND(D$1>=$B2, D$1<=$C2),再选填充色。日期落在任务区间内的格子就自动上色。
混合引用是全部的机关:D$1 锁住行,让每一列去读自己那天的日期;$B2 锁住列,让每一行去读自己那项任务的起止日期。选中区域时要让左上角那个格子保持为活动单元格,因为公式是站在它的角度写的,其余格子按相对位置偏移。
再叠两条规则会好用很多,注意顺序——规则自上而下判断,第一个填充生效,所以横条那条必须排在最上面:=COUNTIF($H$2:$H$5,D$1)>0 把法定节假日涂成另一种浅色,=WEEKDAY(D$1,2)>5 把周末涂灰。WEEKDAY 的第二参数一定要写 2:它把周一编为 1、周日编为 7,>5 正好是周六周日;默认的 1 从周日起算,会涂错两天。调休上班的周六再单列一份日期,另加一条 COUNTIF 规则改回工作日底色即可。
结果是一张读起来像甘特图、并且就活在表格里的网格,改日期立刻重绘,打印也干净,插入行的容忍度比图表高。三个月以内很实用,超过一个季度列数太多就难以阅读了;里程碑和进度仍然要手写规则,而且它同样对依赖关系一无所知。
让图表更好读
几个小调整对三种做法都有效:加一列阶段并按它排序,或用时间轴视图的"分组依据"聚合相关任务;加一列完成百分比,在堆积条形图里把工期拆成"已完成"和"剩余"两段;把工期为零的里程碑换成对比色。
依赖关系是硬边界。Google 表格没有"任务 B 在任务 A 结束后开始"这个概念。可以用 =WORKDAY(C2,1,$H$2:$H$5) 伪造完成-开始这一种,但没有可见的箭头,另外三种类型根本没有表达方式,链条一长就很脆。如果依赖关系和自动重排对你的项目重要,那就是该换工具的信号。整体流程见甘特图怎么做。
哪种方法给你什么
三种方法都能画出一份进度,但没有一种会算出一份进度。它们之间的差别是真实的,只是在这个共同的边界面前显得很小,所以两件事一起放在这张表里:
| 能力 | 时间轴视图 | 堆积条形图 | SPARKLINE | 真正的排程工具 |
|---|---|---|---|---|
| 搭建成本 | 两分钟 | 两列辅助列 | 一条公式 | 输入并拖动 |
| 跳过周末 | 不会 | 靠 WORKDAY | 靠 WORKDAY | 内置 |
| 跳过法定节假日 | 不会 | 靠 WORKDAY 第三参数 | 同左 | 工作日历,含调休 |
| 单条 FS 链自动重排 | 开始列是公式则可以 | 开始列是公式则可以 | 开始列是公式则可以 | 可以 |
| 依赖箭头 | 没有 | 没有 | 没有 | 有 |
| 一项任务两个前置 | 隐藏的 MAX() | 隐藏的 MAX() | 隐藏的 MAX() | 原生支持 |
| SS、FF、SF 三种类型 | 不支持 | 不支持 | 不支持 | 支持 |
| 关键路径 | 没有 | 没有 | 没有 | 自动计算 |
| 每项任务的总浮动时间 | 没有 | 没有 | 没有 | 自动计算 |
| 资源负荷与超配提醒 | 没有 | 没有 | 没有 | 有 |
| 基准与偏差 | 手工复制列 | 手工复制列 | 手工复制列 | 保存并自动对比 |
| 插入一行后还正常 | 正常 | 公式要重敲 | 公式要补填 | 正常 |
| 重新排序后还正常 | 正常 | 不正常 | 不正常 | 正常 |
| 能导出成图片 | 不能——它是视图 | 能 | 不能——它是单元格 | PNG、PDF、PPTX |
中间那一片"没有"不是在贬低表格,那本来就在电子表格的范围之外。表格存的是你在别处决定好的数字。你要的如果是把它们推导出来——哪项任务在决定交付期、其余任务各有多少余量——再花哨的公式也到不了那里。
各自适合什么场景,以及共同的局限
时间轴视图用于快速总览和路线图,五分钟就能出结果;堆积条形图用于需要对外分发、插进文档或幻灯片的图表;条件格式用于希望计划始终留在表格里、和其他数据放在一起的场合。想更省事就直接从模板开始:复制一份到自己的云端硬盘,把示例数据覆盖掉即可。
但三种方法都不计算依赖关系,也没有关键路径。任何一项任务延期都不会自动传导到后续任务——除非你把开始日期全写成 WORKDAY 公式,而那也只覆盖单链。导出同样别扭:时间轴视图不是图片,条形图搬进幻灯片时样式经常走样;整表可以用文件 › 下载 › Microsoft Excel (.xlsx) 导出。
表格真正的长处是多人实时协作和"数据本来就在这儿"。一旦需要计划自己会算,就该换工具了——gantts.app 免费、无需注册、无需下载,全部在浏览器里运行:输入任务、拖动横条、连上依赖关系,时间轴自动重排并高亮关键路径,再一键导出 Excel、PowerPoint、PDF 或 PNG。计划小而稳定、或者数据本来就长在表里,就用表格;一旦需要依赖关系、关键路径,或者一张不用人看着就能保持同步的图,就换到编辑器。
常见问题
Google 表格有内置的甘特图吗?
没有一键生成的甘特图类型,但有「时间轴」视图(插入 › 时间轴),能把带起止日期的表格变成时间轴上的卡片。真正的甘特图要用堆积条形图做,两者都不支持依赖关系和关键路径。
「时间轴」视图和甘特图有什么区别?
时间轴是绑定源表的交互式视图,缩放和分组都很方便,但它不是可编辑的图表对象,不能像图片一样插进幻灯片,也不计算依赖关系和关键路径。
怎么在 Google 表格里加依赖关系?
只能用公式手工模拟,比如把开始日期写成前置任务结束日期加一天。表格画不出箭头,也不会在任务延期时自动重排后续日期。
为什么我的横条从最左边开始?
通常是偏移量系列没有设成透明,或者偏移量、工期两列仍然是日期格式。先把这两列改成纯数字,再检查该系列的填充颜色是否为"无"。还有一种情况是横条长度误用了工作日那一列:图表横轴按自然日计数,含周末和节假日,所以横条长度必须写 =C2-B2+1,十个工作日的任务对应十二格。
能只用一个单元格做出甘特图吗?
可以,用 SPARKLINE。偏移量在 E2、横条长度在 F2 时,写 =SPARKLINE({E2,F2},{"charttype","bar";"color1","white";"color2","#6c4cf1";"max",96}) 就能在单元格内画出一条横条。把 max 固定为项目总天数,每一行才共用同一条坐标轴。它比图表对象更扛得住插行和重新排序,但同样没有依赖关系和关键路径。
法定节假日和调休怎么处理?
把节假日日期列在一个区域里(例如 H2:H5),所有 WORKDAY 都带上这个参数,跨假期的任务就会自动顺延。调休上班的周六 WORKDAY 处理不了,只能把该任务的工作日数手工减一天并写清注释,或者换用带工作日历的排程工具。
国内用不了 Google 表格怎么办?
腾讯文档在线表格和飞书多维表格都支持堆积条形图和条件格式,本文的辅助列思路、公式和踩坑点原样适用,只有菜单名不同。函数名同样是英文,参数用半角逗号分隔。
用 Google 表格做甘特图要花钱吗?
不用。有 Google 账号就能免费使用表格,三种方法都没有额外成本。gantts.app 同样免费,而且连账号都不需要。
怎么转成 Excel 或 PowerPoint?
整表可以用「文件 › 下载 › Microsoft Excel (.xlsx)」导出,图表可以复制成图片贴进幻灯片。更快的办法是在 gantts.app 里做好后一键导出。
延伸阅读
本文也提供英文版本。