【问题标题】:Using Google Sheets API from within Apps Script for same Sheet在 Apps 脚本中使用 Google Sheets API 处理同一张表格
【发布时间】:2017-02-11 18:56:06
【问题描述】:

使用绑定到电子表格的 Apps 脚本来影响表格非常简单,通过 SpreadsheetApp 全局。但是,有些功能(例如在工作表上获取/设置过滤器)只能从 Google 表格 REST API 访问。

我见过一个示例,它使用 Apps 脚本中的 UrlFetchApp 来调用 Google Sheet API,但它的编写方式好像 Apps 脚本实际上并未绑定到特定的电子表格。

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;
}

当我尝试从电子表格绑定的应用程序脚本中调用此函数时,我收到错误消息“请求的身份验证范围不足”。

由于脚本以拥有文档的用户身份运行,并且正在使用 ScriptApp.getOAuthToken(),因此尚不清楚为什么会发生此错误。

任何帮助将不胜感激。

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-api


    【解决方案1】:

    首先,确保您在开发者控制台中启用 Sheets API

    错误“Request had insufficient authentication scopes”是请求中提供的 OAuth 2.0 令牌中的错误,指定的范围不足以访问所请求的数据。

    确保您使用正确且所有必要的scopes,如果您正确按照此处的步骤操作,请检查此Authorizing requests with OAuth 2.0

    您也可以尝试撤销访问权限并尝试重做。

    有关更多信息,请查看ScriptApp.getOAuthToken() 和此thread 的文档

    【讨论】:

    • 感谢您的回复。在提交这个问题之前,我已经探索了你提出的所有建议。关于“所有必要范围”的使用,似乎没有办法从 Apps 脚本中指定访问谷歌表格 API 所需的范围。您被动引用的线程使用“DriveApp”,它隐式地将必要的范围添加到 Apps Script(我相信可以在 Apps Script 属性对话框中看到); Google Sheets API 是如何做到这一点的?
    • 您是否已经尝试使用 muteHttpExceptions 选项检查完整响应?也许这个问题不仅仅与范围有关。查看link 了解如何使用 UrlFetchApp。
    • 是的,也试过了。 “完整”原始文本响应是 { "error": { "code": 403, "message": "Request has enough authentication scopes.", "status": "PERMISSION_DENIED" } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多