A Gantt chart in Google Sheets is built by entering a project schedule in three columns — Task, Start date, End date — adding two helper columns for offset and duration, and plotting the data as a horizontal stacked bar chart with the start-offset series hidden. Once the offset series is set to no fill, every remaining bar lines up against a shared calendar axis and visually shows each task's span. The Sheets approach uses only the built-in chart editor, needs no add-on, and reads your task list as plain cells so you can sort, filter, and reuse the data. The catch is the manual setup: each row of duration math is added by hand, the chart re-renders every time you change a date, and the visual stays inside your spreadsheet rather than exporting as a clean standalone file. For a quick at-a-glance chart inside Sheets, that is fine. For a downloadable, presentation-ready SVG timeline that does not require chart editing, a dedicated browser tool is the faster path.

How a Google Sheets Gantt chart actually works
Google Sheets does not include a native "Gantt" chart type. What most people call a Sheets Gantt is a horizontal stacked bar chart in which the first series, a start-offset count of days, is set to transparent, leaving the second series, a duration in days, to draw a visible bar. Every bar is then plotted along a date-based horizontal axis, so the visible spans align with calendar days rather than arbitrary numbers.
The trick is the offset column. Sheets cannot plot "this task started on January 1" directly. It plots a count of days measured from the project's earliest start. Once that offset is hidden behind a transparent fill, the bar looks like it begins on January 1 even though the underlying value is the elapsed day count from a chosen anchor date. Two helper columns do the math for you.
Build a Gantt chart in Google Sheets
Follow these steps in a fresh Google Sheets file. They cover the standard stacked-bar Gantt pattern using only the built-in chart editor.
- Create columns A through E with the headers Task, Start, End, Start Offset, and Duration.
- Enter your tasks in column A and real dates in columns B and C. Use YYYY-MM-DD form so the underlying serial dates stay unambiguous regardless of your Sheets locale.
- In D2, enter =B2 - MIN($B$2:$B$N) where N is your last task row. This gives the number of days each task starts after the earliest task in the list.
- In E2, enter =C2 - B2 + 1 for an inclusive duration. A task from 2025-01-01 to 2025-01-03 spans three days, not two.
- Select columns A, D, and E. Use Ctrl/Cmd-click to grab non-adjacent columns if needed.
- Insert > Chart. In the chart editor, set the chart type to Bar chart and check the Stack option.
- Under the Customize tab, click the Start Offset series and set its fill color to None so it becomes invisible.
- Format the horizontal axis. Open Horizontal axis and either treat labels as text or set explicit minimum and maximum values based on your date range.
- Add data labels under Customize > Series > Duration > Data labels so each bar shows its span in days.
- Rename the chart title, recolor the visible series, and resize the chart frame to fit your layout.
That produces a working Sheets Gantt. Here is a quick reference for the column layout you just built.
| Column | Header | Purpose | Example |
|---|---|---|---|
| A | Task | Human-readable task name | Design mockups |
| B | Start | Real start date | 2025-01-01 |
| C | End | Real end date, inclusive | 2025-01-03 |
| D | Start Offset | Days from project earliest start | =B2-MIN($B$2:$B$N) |
| E | Duration | Inclusive day count | =C2-B2+1 |
Why the Sheets chart gets tedious fast
The setup works cleanly for a handful of tasks, but every additional row adds a small amount of friction that compounds as the schedule grows.
- Every new task needs a fresh duration formula, an extra chart row, and a re-render that sometimes shifts the axis scale.
- Holidays, working days, and time zones are not modeled. Sheets Gantts count every calendar day, including weekends.
- Editing a date moves the bars but does not validate that the new end is still after the start. Typo dates become off-by-one bars silently rather than an error message.
- The chart lives inside the file. Exporting it as a clean image usually means a screenshot, a slide paste, or a copy into another document.
If your schedule is short and stable, none of this matters much. If you are managing more than ten tasks, sharing the chart with people who do not edit the spreadsheet, or rebuilding it every week, the maintenance cost is real.
Try the Gantt Chart Maker for a downloadable SVG
For a self-contained timeline you can drop into a slide deck or share as a file, the Gantt Chart Maker turns a compact CSV-lite list into a standalone SVG entirely in your browser. You paste your schedule, generate, verify the preview, and the file you download is the exact string you just reviewed.
Because every task, start, and end date is validated as a real proleptic Gregorian UTC calendar date in YYYY-MM-DD form, off-by-one mistakes are caught at the input stage rather than showing up as misaligned bars. Inclusive end dates are built in: a task from January 1 through January 3 occupies three calendar cells, and a same-day task occupies one cell. Nothing about your schedule, title, or SVG is uploaded to Lizely; parsing, UTC date arithmetic, SVG creation, preview rendering, and download all stay in the current tab.
Make a Gantt chart with Gantt Chart Maker
Follow these steps to produce the SVG timeline.
- Open the Gantt Chart Maker and optionally type a title in the title field. The title can be up to 100 UTF-16 code units and is XML-escaped the same way task labels are.
- Paste 2 to 30 task rows in the schedule field, one task per line, in the exact form task,start,end — exactly two commas per non-empty row, real UTC dates in YYYY-MM-DD form, and an end date on or after the start date.
- Click Generate. The parser first checks the raw input budget of 20,000 UTF-16 code units, then trims whitespace around each field, then rejects any row with more or fewer than two commas. A single malformed row fails the whole request rather than producing a partial chart.
- Review the preview. Every accepted task is drawn as a labeled rectangle against a shared UTC calendar axis. Each day's width equals the plot width divided by the inclusive domain day count, so bars line up predictably.
- Look at the axis. Day ticks appear for schedules of 62 days or fewer. Longer schedules switch to deterministic month ticks chosen to keep roughly nine labels while still including the first and last date. Every accepted task and its complete date span remain in the chart; the tick switch is axis sampling only.
- Click Download. The exported file is the exact SVG string used for the preview, with safe text escaping, grid lines, bars, title tooltips, and an accessible label. The serialized output is checked against a 100,000 UTF-16 code unit budget.
Here is the rule of thumb for axis mode in this tool.
| Schedule length | Tick mode | Tick label format |
|---|---|---|
| 62 days or fewer | Day ticks | UTC YYYY-MM-DD |
| 63 days or longer | Sampled month ticks | UTC YYYY-MM |
What the standalone SVG contains
The download is not a screenshot of the preview. It is the same XML string the preview renders, with deterministic coordinates rounded only when serialized. Each task becomes a <rect> element placed by whole UTC-day offsets, with a width equal to its inclusive day count. Tick labels are UTC YYYY-MM-DD in day mode and UTC YYYY-MM in month mode. User strings pass through XML entity escaping for ampersands, angle brackets, quotes, and apostrophes, so a label such as "Q&A review" or "<final>" still displays as visible characters rather than as markup. According to the W3C SVG 2 specification, this is the standard pattern for safe text content inside an SVG document.
The SVG also includes a fixed 1,100-pixel logical width, a row-dependent height, a white background, grid lines, title tooltips on each bar, a viewBox, and an accessible role plus aria-label. Script-looking text in a label remains visible text rather than becoming an SVG element. The chart describes calendar occupancy only. It does not show percentages, dependencies, milestones, working calendars, holidays, resources, or progress. If you need dependency planning, collaboration, audit history, or operational commitments, dedicated project-management software is the right tool.
When to keep using Sheets versus switching tools
Sheets is the right answer when you want to keep editing the schedule in the same place you store it, the task count is small, and a chart-within-a-spreadsheet is good enough. The Gantt Chart Maker is the right answer when you need a downloadable SVG that survives outside the spreadsheet, when you want strict date validation so typos do not silently shift bars, or when you are presenting the chart rather than maintaining it.
You can use both. Paste the same task list that already lives in your Sheets columns into the Gantt Chart Maker to produce a clean standalone SVG for slides, and keep Sheets as the editable source of truth. If your team works more often in Docs than Sheets, a parallel Gantt approach is available there too.