user2672083
user2672083

Reputation: 375

Using Google Sheets API from within Apps Script for same Sheet

Using an Apps Script that's bound to a Spreadsheet to effect the sheet is very straight forward, via the SpreadsheetApp global. However, there's some functionality, such as getting/setting filters on a sheet, that can only be accessed from the Google Sheets REST API.

I've seen an example that uses UrlFetchApp from within an Apps Script, to call the Google Sheet API, but it's written as if the Apps Script is not actually bound to a particular Spreadsheet.

function getSheetBasicFilter(ssId, sheetId) {
  var params = {
    headers: {
      "Authorization": "Bearer " + ScriptApp.getOAuthToken()
    }
  };
  var base = "https://sheets.googleapis.com/v4/spreadsheets/";
  var partialRespParams = "?fields=sheets%2FbasicFilter";
  var resp = UrlFetchApp.fetch(base + ssId + partialRespParams, params);
  var sheets = JSON.parse(resp.getContentText()).sheets;
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].basicFilter 
        && (sheets[i].basicFilter.range.sheetId == sheetId 
            || (!sheets[i].basicFilter.range.sheetId && sheetId == 0))) {
      return sheets[i].basicFilter;
    }
  }
  return null;
}

When I attempt to call this function from within a Spreadsheet Bound Apps Script, I get an error 'Request had insufficient authentication scopes'.

Since the script is running as the user that owns the document, and ScriptApp.getOAuthToken() is being used, it's not clear why this error is occurring.

Any help would be appreciated.

Upvotes: 4

Views: 2032

Answers (1)

KENdi
KENdi

Reputation: 7771

First, make sure you enable the Sheets API in your Developers Console.

The error "Request had insufficient authentication scopes" is an error in the OAuth 2.0 token provided in the request specifies scopes that are insufficient for accessing the requested data.

Make sure you use the correct and all necessary scopes, and check this Authorizing requests with OAuth 2.0 if you properly follow the steps here.

You can also try to revoke the access and try to redo it.

For more information, check the documentation of ScriptApp.getOAuthToken() and this thread

Upvotes: 1

Related Questions