Automatically Build Google Slides from a Google Sheet

Current Version: 20260311 - Changelog at bottom.

TL;DR

This post is about a Google Sheets + Apps Script setup I made this weekened. It converts rows in a sheet into a reasonably nice looking Google Slides deck without building each slide by hand.

Anyone that knows me is very much aware that I really do not enjoy building slide decks. The visual design always takes over the message, and many hours are lost tweaking text boxes and font sizes so everything lines up perfectly. Perhaps it’s just an unfortunate personality trait of mine where seeing things not line up drives me nuts.

If most slide creation tools didn’t feel like a rebranded early-2000s HTML generator, perhaps making a presentation would be a much easier process. Unfortunately this is the way of life in the corporate world, so here we are.

Slides

Intro

I like Google Slides just fine right up until I click Create New.

That is where the annoying part starts. Whenever the content changes, the structure needs adjusting, and somehow I end up nudging text boxes around for way too long. At that point I am not really thinking about the message anymore. I am just managing layout quirks.

So I put together an Apps Script that reads rows from a Google Sheet and generates a basic deck for me. Each row in the sheet becomes its own slide. You pick a layout, throw in a title, subtitle, body, layout type, and accent color, then let the script handle the design.

This is the kind of thing I use for quick status updates, internal comms, and any deck where the message matters more than spending half an hour deciding whether a screenshot should move eight pixels to the left. It saves time, keeps the focus on the content, and removes a lot of the tiny visual decisions that eat up way more time than they should.

Sheet

Quick Start

The simple version:

  1. Make a new Google Sheet.
  2. Add columns for title, subtitle, body, layout, and color.
  3. Open Extensions -> Apps Script and paste in this script.
    • Note: Never blindly run any weirdo’s script. Read it before trusting it.
  4. Reload the sheet so the custom Deck Generator menu shows up in the top.
  5. Run Setup Config tab from the menu.
  6. Open the new Config tab and add a deck title.
  7. Fill in a few rows on the main sheet.
  8. Use Create new deck in the menu.
  9. The newly created deck URL will populate in the Config tab for reuse.

That’s it. The sheet is your content source. The script is the formatter. Slides is just the rendered output.

The Sheet

The script is built around five main columns:

  • A: Title
  • B: Subtitle (optional)
  • C: Body
  • D: Layout
  • E: Accent color

If a row has no title and no body, it gets skipped. Everything else turns into a slide.

The color field can be named like blue, red, green, or yellow. If you want more options, you can expand the color map in the script.

How It Works

There are two main actions in the menu:

  • Create new deck makes a brand new presentation, updates the url in the Config tab, and notifies you with a clickable link.
  • Update existing deck opens a presentation from the URL in the Config tab and rebuilds it from the sheet.

Important: Updating the deck is destructive. It appends all the newly generated slides, then removes the old ones. So do not run it on an existing deck if you want to preserve hand-edited slides. I built this around a simple rule: the sheet is the source of truth, and the deck is what gets (re)generated from it.

If that sounds a little scary, that’s good. Just be aware of it and do not point it at a deck where you already spent hours fine-tuning everything. Use it as the starting point, get the structure and messaging right, and then do any manual cleanup after.

Layouts

This thing supports a handful of layouts that are good enough for frequent business slides without trying to be a full design tool.

  • title
  • bullets
  • screenshot-left
  • screenshot-right
  • screenshot-below
  • timeline
  • section-divider
  • quote
  • compare-2col
  • kpi
  • process-steps

In the deck, screenshot-left maps to a layout with bullets on the right and space for a screenshot on the left, where timeline maps to a timeline-grid layout.

The screenshot layouts do not magically fetch screenshots (yet). They create a placeholder card that literally says Insert Image Here, which is incredibly useful because it gives you a place to drop an image without rebuilding the slide layout every time.

Body

Most layouts are simple. Bullets are just bullets, one per line. But a few layouts expect a little structure. You do not need to memorize any of it, though. The following helper formula can auto-populate starter text based on the layout you pick. Just copy below and paste in the body column of your sheet:

=IFS(
  D2="bullets", "First bullet" & CHAR(10) & "Second bullet" & CHAR(10) & "Third bullet",
  D2="quote", "Put the quote text here",
  D2="compare-2col", "Before|Manual updates|Slow turnaround::After|Automated generation|Consistent slides",
  D2="kpi", "$1.2M" & CHAR(10) & "Revenue" & CHAR(10) & "+12% vs last quarter",
  D2="process-steps", "Discover" & CHAR(10) & "Design" & CHAR(10) & "Build" & CHAR(10) & "Launch",
  D2="timeline", "Phase 1: Kickoff" & CHAR(10) & "Phase 2: Build" & CHAR(10) & "Phase 3: Launch",
  D2="title", "Section: Overview" & CHAR(10) & "Owner: Team" & CHAR(10) & "Date: March 2026",
  D2="screenshot-left", "First bullet" & CHAR(10) & "Second bullet",
  D2="screenshot-right", "First bullet" & CHAR(10) & "Second bullet",
  D2="screenshot-below", "First bullet" & CHAR(10) & "Second bullet",
  TRUE, ""
)

Bullets: One bullet per line.

First bullet
Second bullet
Third bullet

Timeline: Use Label: detail on each line. The bit before the colon becomes the label. Everything after it becomes the description.

Phase 1: Kickoff
Phase 2: Build
Phase 3: Launch
Phase 4: Profit?

Compare 2-column: Uses a pipe and double-colon format. That turns into two side-by-side cards. The first item on each side becomes the column heading. The rest become bullet-ish points inside that card.

Before|Manual updates|Slow turnaround::After|Automated generation|Consistent slides

KPI: This one expects three lines. Line 1 is the big value. Line 2 is the label. Line 3 is the delta or whatever supporting values.

$1.2M
Revenue
+12% vs last quarter

Process Steps: One step per line. The script turns those into numbered cards across the slide.

Discover
Design
Build
Launch

onEdit()

The script also has an onEdit helper that can populate the body cell when the layout changes, but only if the body cell is blank. So you can use the formula from above, the onEdit results, or neither.

Why It’s Awesome

When the content lives in rows on a sheet, it gives you a few nice advantages:

  • You can sort, filter, and bulk edit the content.
  • Non-designers with little patience can update messaging without touching slide layouts.
  • The structure stays consistent.
  • Regenerating the deck is faster than cleaning up a messy old one.

It’s basically treating Slides as the rendered output rather than the place where all the writing happens.

One small quality-of-life thing: use Google Sheets dropdowns for the Layout and Accent color columns so nobody has to remember or manually type values like compare-2col or yellow.

Select the cells or full columns you want, then go to Insert -> Dropdown. From there, add the allowed layout names or color names as options and save it. Now each row gets a clean picker instead of freeform text, which means fewer typos or mystery issues caused by someone typing Timeline when your script expects timeline.

Things to Remember

  • It is opinionated about structure.
  • Updating a deck replaces the old slides instead of merging with manual edits.
  • The screenshot layouts create placeholders, not actual image imports (yet).
  • You need to follow the expected text patterns for layouts like timeline, compare-2col, and kpi.

That said, simple is the point. I wanted something where I could fill in the details, click a button, and have a solid starting deck without burning half a day on formatting.

Who is this for?

If you build Google Slides and hate all the tedium, this is probably for you.

If your team already keeps the source content in Sheets, this is definitely for you.

If you enjoy tediously dragging and repositioning shapes around in a slide deck for fun, you can safely ignore everything I just said, and may god have mercy on your soul.

For me, this is a perfect start. It is lightweight, easy to edit, scalable through AppScript updates, and good enough to turn spreadsheet content into a deck that looks clean and professional - with corporate theming options.

 

  • 20260321
    • Initial.

Questions or comments?

Previous: Batman Sucks: A Completely Reasonable Review Next: Ninja Foodi Indoor Grill