I built a scheduling template for Excel and then did the thing everybody does, which is open it in Google Sheets to see what survived. Most of a Gantt chart in Google Sheets works exactly as it does in Excel — the date maths, the lookups, the bars. One design decision in the file exists specifically because of what does not survive a trip between spreadsheet programs, and it is worth explaining, because it is the kind of thing that fails quietly rather than loudly.
This is the Google Sheets half of the template I wrote about when I built the Excel version. Same file, same six tabs — you can download the Excel version or copy the Google Sheets version, whichever saves you a step.

What ports cleanly
The engine of a calculated schedule is three functions, and Sheets has all three under the same names.
WORKDAY in Google Sheets behaves the way it does in Excel: give it a date and a number of working days and it hands back the date that many working days later, skipping weekends. That is what makes Finish a formula rather than a guess, and it is what stops a five-day task that starts on a Thursday from claiming to end on a Monday morning that nobody is working.
INDEX and MATCH port unchanged, which matters more than it sounds. Resolving “this task waits on tasks 3 and 7, take the later of the two finishes” is a lookup problem, and I deliberately built it out of scalar INDEX/MATCH through hidden helper columns rather than one dense array formula. Array formulas are where Excel and Sheets diverge most — different spill behaviour, different implicit-intersection rules — so the boring construction is the portable one. It was worth the extra columns.
Conditional formatting carries over too. The bars in the day grid are not shapes or drawings; they are cells that fill when the column’s date falls inside a task’s span. Sheets applies the same rule to the same range and draws the same chart. Weekend shading and the red overload row work the same way.
The part that does not travel: formula versus typed value
In this template, Start is calculated. It is not a date you enter — it falls out of the predecessors you listed. But you sometimes need to override it: the inspector only comes on the 14th, the crane is booked for that week, this task is not moving. So typing a date over a calculated Start cell pins that task in place.
The obvious way to detect a pin is to ask whether the cell contains a formula or a literal value. A formula means calculated; a typed date means pinned. It is elegant, it needs no extra column, and I did not do it.
The reason is that “is this a formula” is not a stable property of a cell once the file starts moving between programs. A round-trip through another spreadsheet application can leave you with plain values where formulas used to be. If pin detection rests on that test, the failure is silent and total: every task reads as pinned, nothing is allowed to move, and the scheduler dutifully hands back the schedule you already had while reporting that it is optimal. No error, no warning, just a tool that appears to do nothing.
So there is an explicit Pin column instead. Column I, one flag per row, and it means what it says regardless of what happened to the Start cell on the way. It costs a column and it cannot be misread. That trade is worth making anywhere a file leaves the program that created it, which — for anything shared with a client or a sub — is always.
What Google Sheets is actually better at
I am not going to pretend the Excel version is the serious one. For a schedule, Sheets has a real advantage and it is not a feature list: everyone is looking at the same file. The site super updating durations from a phone and the office seeing it change is worth more on most jobs than anything Excel does better. That is the same reason I put my other scheduling models on the web rather than shipping workbooks — the shift scheduler ended up as thirteen web pages for exactly this reason.
That matters most for the resource load panel. The row that adds up how many people each day needs, and turns red when the total exceeds the crew you have, is an argument-settler — and an argument-settler is only useful if both parties can see it. In a Google Sheets Gantt chart template it is live. In an emailed workbook it is a screenshot somebody disputes.
What Sheets does not fix is the thing neither program can do. Once the red row appears, the question becomes: given these dependencies and this crew, what is the best possible schedule? That is a resource-constrained project scheduling problem. It is NP-hard, there is no formula for it, and no amount of conditional formatting gets you there. It is also, for what it is worth, not what the leveling button in commercial project software is doing either — the one published benchmark of those packages found them landing a median 3.6% above the optimal schedule, and getting steadily worse as crews got tighter.
Getting from Sheets to an answer
The workflow I use is unglamorous and takes about fifteen seconds. Keep the plan in Sheets where the team lives. When you want it solved, File → Download → Microsoft Excel (.xlsx), drop that on the project scheduler, and it comes back as a workbook with the solved dates written into the Start column and a solution tab showing float, the critical chain, and which task each one is really waiting on. Paste it back into Sheets, or just keep the returned file.
The tool answers two questions rather than one, which is the part I would want to know before uploading anything. Work within my crew — when does it finish? treats your headcount as a hard limit and tells you the earliest honest date. Keep my date — how many people would it take? holds the deadline and tells you the crew it demands. The second one is usually the uncomfortable answer and usually the one that ends the argument.
Take the template
The file is free with no email and no signup, and it opens in either program: download the Excel version or copy the Google Sheets version. Sixty tasks, ninety-five days, six tabs. Start and Finish calculated, predecessors with finish-to-start, start-to-start, finish-to-finish and lag, a Check column that tells you when a predecessor is listed below the task that needs it, and the daily crew panel that goes red.
If you build your own instead — which is a perfectly good afternoon — the two things I would take from mine are the explicit pin flag and the crew row. The first is insurance against a failure you would otherwise spend an hour not finding. The second is the only part of the whole exercise that tells you something you did not already type in.
Things that I use, like, and am affiliated with:
Mint Mobile offers great cell phone service for $15 flat, get $15 off using the link. Get discounted phones with service activation and no contract.
I never spend money before I check Mr Rebates or Rakuten to get cashbacks, rebates, discounts, coupons or cheaper gift cards.
