Mastering Google Apps Script

Advanced Techniques for Google Sheets Extensions

Fullstack CTO
4 min readApr 18, 2024

Developing extensions for Google Sheets with Google Apps Script can be made significantly more convenient and efficient by using certain hacks and best practices. This article provides helpful tips and tricks that will accelerate development, simplify code, and enhance its readability and scalability.

1. Optimizing API Requests to Google Sheets

When developing extensions for Google Sheets, it’s crucial to focus on efficient API interactions to minimize delays and enhance performance. Use the following methods to optimize your requests:

Batch Processing of Requests

Google Apps Script allows for sending batch requests to the API, reducing the number of HTTP requests and increasing data processing efficiency. Group multiple operations, such as updating or reading data from different sheets, into a single batch request.

const sheet = SpreadsheetApp.getActiveSpreadsheet();
const batchUpdateRequest = {
requests: [
{
updateCells: {
// parameters for updating cells
}
},
{
addSheet: {
// parameters for adding a new sheet
}
}
]
};

sheet.batchUpdate(batchUpdateRequest);

Optimizing Data Retrieval

When working with large datasets, limit the amount of data retrieved by using filters and queries that return only the necessary information. This reduces load times and data processing.

const range = sheet.getRange("A1:D10"); // Only read the necessary range
const data = range.getValues();

Asynchronous Operations

Consider using asynchronous operations for API requests where possible, to avoid blocking script execution. Although Google Apps Script does not support direct asynchrony through Promises or async/await, you can structure your code to allow operations that require waiting to run in the background.

By applying these methods, you will not only speed up script operation but also reduce the load on the Google Sheets API, allowing your extensions to operate more stably and reliably.

2. Debugging and Logging

Debugging and logging are critical aspects of developing extensions for Google Sheets as they help monitor script behavior and detect errors. Google Apps Script offers several approaches and tools to assist you:

Built-in Logging Functions

Google Apps Script provides several ways to log:

  • Logger: The most basic tool for logging in Google Apps Script, which can be used to output information during script execution. However, logs via Logger are only available during script execution and are reset afterward.
function myFunction() {
Logger.log('This is a log entry');
}
  • Console.log: In recent versions, Google Apps Script supports console.log, allowing you to view logs through "Executions" in the script editor. These logs are more convenient for analysis as they are preserved after script execution.
function myFunction() {
console.log('Detailed logging information');
}

Stackdriver Logging

For more complex projects requiring systematic log analysis, Stackdriver Logging (now Google Cloud Logging) is recommended. This tool allows you to store, view, and analyze logs in Google Cloud Console. Logs can be exported to other services, and alerts can be set for specific events.

Logging User Actions

To improve user experience and detect non-obvious errors, it’s helpful to log user actions, especially when working with user interfaces. This will help understand how users interact with your extension and identify potential improvements or fixes.

Regular Log Analysis

Regularly review and analyze logs to identify potential bottlenecks and frequent errors. This will help improve the stability and performance of your script.

Using these approaches and tools, you will be able to more effectively debug and monitor the operation of your scripts, ultimately leading to the creation of more reliable and user-friendly extensions for Google Sheets.

3. Modular Approach

Structure your script using modules. Google Apps Script does not support ES6 modules out of the box, but you can emulate modularity using objects and functions in different files of your project. This simplifies the maintenance and scalability of the project.

4. Using Triggers

Google Apps Script allows you to create triggers to automate tasks. Use triggers for the automatic execution of functions based on schedules or changes in table data.

function createTimeDrivenTriggers() {
ScriptApp.newTrigger('dailyReport')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}

5. Optimizing Work with Google Sheets

When working with large volumes of data, avoid frequent calls to data reading and writing functions. Instead, use methods like getValues() and setValues(), which allow you to handle data in arrays. This reduces the number of API calls and enhances script performance.

6. Data Caching

Use caching for temporary data storage, especially for data that does not change with each script run. The CacheService allows you to save data for a certain period, reducing the number of calls to external sources and APIs.

function getCachedData() {
let cache = CacheService.getScriptCache();
let cached = cache.get("key");
if (cached != null) {
return JSON.parse(cached);
} else {
let data = fetchData(); // your some data function
cache.put("key", JSON.stringify(data), 1500); // 1500 seconds
return data;
}
}

--

--