Back to BlogAutomation

Slide Decks That Build Themselves: Generating Reports in Google Slides from Sheets

Stop copy-pasting charts every Monday. Automate your weekly business reviews by syncing Google Sheets data directly to Google Slides.

November 27, 2025
2 min read

Monday Morning QBRs are a special kind of hell. You have the data in Sheets. You have the template in Slides. Yet you spend 2 hours taking screenshots of charts and pasting them into the deck.

Why? Google Sheets and Google Slides talk to each other. You just need to introduce them.

Here's the Setup

Your Sheet has the live data. Your Slides deck has the template with placeholders like {{Revenue}}. Apps Script connects them and auto-updates everything when you run it.

The Code: Deck Updater

1. Setup

  • Sheet: "KPIs" (A1: Metric, B1: Value). Example: Cell B2 is "$50,000".
  • Slide: Create a text box: "Revenue: {{Revenue}}".
  • Charts: Copy a chart from Sheets and paste it into Slides -> select "Link to Spreadsheet".

2. The Script

// CONFIGURATION
const DECK_ID = "YOUR_SLIDE_DECK_ID";
const SPREADSHEET_ID = "YOUR_SHEET_ID";
 
function updateWeeklyDeck() {
  const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
  const sheet = ss.getSheetByName('KPIs');
  
  // 1. Get Data
  const revenue = sheet.getRange("B2").getDisplayValue();
  const traffic = sheet.getRange("B3").getDisplayValue();
  
  // 2. Open Deck
  const deck = SlidesApp.openById(DECK_ID);
  const slides = deck.getSlides();
  
  // 3. Update Text Placeholders (Global replace)
  deck.replaceAllText("{{Revenue}}", revenue);
  deck.replaceAllText("{{Traffic}}", traffic);
  
  // 4. Update Linked Charts
  slides.forEach(slide => {
    const charts = slide.getSheetsCharts();
    charts.forEach(chart => {
      chart.refresh(); // Triggers the "Update" button programmatically
    });
  });
  
  Logger.log("Deck Updated");
}

Making it a PDF

Want to email it automatically? Add this to the end:

const pdf = DriveApp.getFileById(DECK_ID).getAs(MimeType.PDF);
MailApp.sendEmail({
  to: "boss@company.com",
  subject: "Weekly QBR Deck",
  body: "Here is the updated deck.",
  attachments: [pdf]
});

Why This Wins

Accuracy. When you copy-paste, you risk pasting "Last Week's" number. When the script pulls B2, it pulls the exact current value. Consistency. The font, size, and position never jump around because you aren't manually touching the text boxes.

Newsletter

Get more tips like this

Subscribe for practical Google Workspace automation tips.

Free updates. No spam. Unsubscribe any time.

Want more help?

We're here to help. Drop us an email and let's explore how we can optimize your workflows.

Email us

hello@mereth.dev

reporting automationGoogle Slides automationApps Scriptbusiness intelligencedashboard automationpresentation automation