← Back to list

Top 30 Useful Google Apps Script Snippets

Here are my favorite 30 Google Apps Script snippets. These snippets will save your time.

tanabee in Google Developer Experts · 2020-10-19 14:24 · 64 claps · 2.5 min read
#apps-script #google-workspace #spreadsheets #javascript #google-apps-script
Open on Medium ↗
Wiki topics: 🌐 · Web Development 🔭 · Astronomy & Space 🐾 · Pets & Animals

Top 30 Useful Google Apps Script Snippets

Here are my favorite 30 Google Apps Script snippets. These snippets will save your time.

SpreadsheetApp

Access to Spreadsheet ( standalone scripts )

const spreadsheet = SpreadsheetApp.openById("Spreadsheet ID")

Spreadsheet ID can be obtained from the spreadsheet URL

https://docs.google.com/spreadsheets/d/[ Spreadsheet ID ]/edit

Access to Spreadsheet ( Container-bound scripts )

const spreadsheet = SpreadsheetApp.getActive()

Get values

const values = spreadsheet
  .getSheetByName('sheet name')
  .getDataRange()
  .getValues()

Set values

spreadsheet
  .getRange(range)
  .setValues(values)

Add custom menu

const onOpen = () => {
  SpreadsheetApp
    .getActiveSpreadsheet()
    .addMenu('Menu name', [
      {name: 'sub menu name 1', functionName: 'functionName1'},
      {name: 'sub menu name 2', functionName: 'functionName2'},
    ])
}

onEdit trigger

const onEdit = e => {
  const { range, oldValue, value } = e
}

onSelectionChange trigger

const onSelectionChange = e => {
  const { range, user } = e
}

Google Calendar

Create event

CalendarApp.getDefaultCalendar().createEvent(title, start, end)

Get events

const events = CalendarApp
  .getDefaultCalendar()
  .getEvents(start, end)
  .map(event => ({
    title: event.getTitle(),
    description: event.getDescription(),
    start: event.getStartTime(),
    end: event.getEndTime()
  }))

You can get other properties from CalendarEvent class

Access to not default calendar

const calendar = CalendarApp.getCalendarById('Calendar ID')

Gmail

Send Email

GmailApp.sendEmail('tanabee@example.com', 'subject', 'body')

Search threads

If you’d like to get 10 latest threads,

const threads = GmailApp.search('', 0, 10)

You can set search operators as the first argument.

Get messages

const messages = GmailApp.search('', 0, 10).flatMap(thread => 
  thread.getMessages().map(message => ({
    subject: message.getSubject(),
    body: message.getBody(),
    date: message.getDate(),
    from: message.getFrom(),
    to: message.getTo(),
  }))
)

You can get other properties from GmailMessage class

Google Drive

Get folders and files in the specific folder

const folder = DriveApp.getFolderById('Folder ID')
const files = folder.getFiles()
while (files.hasNext()) {
  let file = files.next()
  console.log('file: ', file.getName())
}
const folders = folder.getFolders()
while (folders.hasNext()) {
  let folder = folders.next()
  console.log('folder: ', folder.getName())
}

Google Form

Get input values

const onSubmit = event => {
  const answer = event.response
    .getItemResponses()
    .map(itemResponse => ({
      item: itemResponse.getItem().getTitle(),
      response: itemResponse.getResponse()
    }))
}

You need to add form submit trigger.

Google Document

Access to Google Document ( standalone scripts )

const doc = DocumentApp.openById('Document ID')

Document ID can be obtained from the spreadsheet URL

https://docs.google.com/document/d/[ Document ID ]/edit

Access to Google Document ( Container-bound scripts )

const doc = DocumentApp.getActiveDocument()

Add custom menu

const onOpen = () => {
  DocumentApp
    .getUi()
    .createMenu('menu name')
    .addItem('item name', 'functionName')
    .addToUi()
}

Utilities

Format date

const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'YYYY-MM-dd HH:mm:ss')

sleep

If you want the script to sleep for 1 second

Utilities.sleep(1000)

Generate UUID

const uuid = Utilities.getUuid()

Trigger

Execute a function after 1 minute

Google Apps Script has a limitation of script runtime. If you want the script to work more than the limit, you can schedule the next execution in advance.

const date = new Date()
date.setMinutes(date.getMinutes() + 1);// after 1 min
ScriptApp.newTrigger('functionName').timeBased().at(date).create();

PropertiesService

Get property

const value = PropertiesService.getScriptProperties().getProperty(key)

Set property

PropertiesService.getScriptProperties().setProperty(key, value)

LanguageApp

translation

const text = LanguageApp.translate('Hello World', 'en', 'ja')

Web Apps

Website ( no HTML template )

const doGet = e => {
  const params = JSON.stringify(e.parameter)
  return HtmlService.createHtmlOutput(params)
}

Website ( with HTML template )

const doGet = e => {
  return HtmlService.createHtmlOutputFromFile('index')
}

You need to create index.html file.

GET API

You can get query string with accessing e.parameter.

const doGet = e => {
  const params = JSON.stringify(e.parameter)
  return ContentService
    .createTextOutput(params)
    .setMimeType(MimeType.JSON)
}

POST API

You can get request body with accessing e.postData.contents.

const doPost = e =>  {
  const body = e.postData.contents
  return ContentService
    .createTextOutput(body)
    .setMimeType(ContentService.MimeType.JSON)
}

UrlFetchApp

You can access other resources when using UrlFetchApp class.

GET API request

const content = UrlFetchApp.fetch(url).getContentText()

POST API request

const res = UrlFetchApp.fetch(url, {
  method: 'POST',
  headers: { "Content-Type": 'application/json' },
  payload: JSON.stringify(data)
})

Thank you for reading this article!


메타데이터
post_id
8ad13077530f
slug
top-30-useful-google-apps-script-snippets-8ad13077530f
url
https://medium.com/google-developer-experts/top-30-useful-google-apps-script-snippets-8ad13077530f
canonical_url
https://medium.com/google-developer-experts/top-30-useful-google-apps-script-snippets-8ad13077530f
author_url
https://medium.com/@tanabee
status
ok
fetched_at
2026-06-16 19:09:56