当前位置: 首页 > 知识库问答 >
问题:

在同一工作表的应用脚本中使用谷歌工作表API

严亦
2023-03-14

通过SpreadsheetApp global,使用绑定到电子表格的应用程序脚本来影响工作表非常简单。但是,有一些功能,例如在工作表上获取/设置过滤器,只能从GoogleSheetsRESTAPI访问。

我见过一个例子,它使用应用程序脚本中的UrlFetchApp来调用谷歌工作表应用编程接口,但它的编写方式好像应用程序脚本实际上没有绑定到特定的电子表格。

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(),因此不清楚为什么会出现此错误。

任何帮助都将不胜感激。

共有1个答案

齐成和
2023-03-14

首先,确保在开发人员控制台中启用了工作表API。

错误“请求的身份验证作用域不足”“是请求中提供的OAuth 2.0令牌中的一个错误,它指定了不足以访问请求数据的作用域。

请确保使用正确和所有必要的作用域,如果正确地遵循此处的步骤,请检查使用OAuth 2.0授权请求。

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

有关更多信息,请查看ScriptApp的文档。getOAuthToken()和此线程

 类似资料:
  • 在谷歌工作表上,尝试根据特定单元格中的值隐藏/取消隐藏行,并尝试在AppsScript中为此编写脚本。发现一个隔离工作(如果B55=NO,则隐藏64行): 但我需要对多个单元格和多行使用相同的方法,只要我展开它,就只有代码的最后一部分有效,而不是第一部分: 从这里开始,B121号牢房开始工作,但我的B55停止工作。有什么提示吗?谢谢!

  • 我运行一个脚本在谷歌表脚本编辑器,以触发脚本我使用onChange在当前项目的触发器,使用特定的功能- 值得一提的是,我与另外3个拥有编辑权限的成员一起使用工作表,他们不时更改数据,我构建了脚本并激活了触发器。 当我更改工作表中的任何内容时,我会收到警报(触发器已打开),但当其他成员更改数据时,触发器不起作用。 我错过了什么? 谢谢

  • 我有一个谷歌电子表格,有两张叫做罗宾和露西的表格。每次我向列A添加一些数据时,我都制作/找到/破坏了一个脚本来对工作表上的数据进行排序 这个剧本很棒,但我只想把它应用在第一张纸上,罗宾。第二个工作表中的数据,Lucy,是不一样的,所以我将创建另一个脚本为不同的范围,一旦我得到了这个问题的头脑。 我想我需要使用getSheetByName(“罗宾”),但我似乎无法让它工作。提前感谢

  • 我想不断更新/重写到谷歌表。不过,我不能只是更新它,而不清除旧的工作表,因为有时更新的行比之前的行和旧的行留在工作表中。 因此,开发者页面上列出的协议是: 翻译成python会是这样的,我认为: 返回错误: GoogleapClient。错误。HttpError:https://sheets.googleapis.com/v4/spreadsheets/[uniqueIDhere]/values:

  • 我试图在谷歌表单的特定列中找到一个空单元格。我熟悉getLastRow(),但它返回整个工作表中的最后一行。我想获取特定列中的第一个空单元格。所以,我使用了for循环和if循环。但我不知道为什么它不起作用。问题是for循环不返回任何内容。我得到了表单测试(第2行)中H列(位置8)的10行。前5行已包含内容。稍后将使用其他代码将数据添加到此单元格。因此,我希望能够在这个列中找到第一个空单元格,以便能

  • 我有一个电子表格从谷歌表单收集我的表单回复。 附在这张纸上的是一个脚本,它将每一行都拉出,进行一些计算,并将结果放入另一张纸中。我不是每次都复制整张表,而是用下面的代码拉两张表的增量: 问题是,我还将过滤器应用于接收工作表,并且每当我插入任何新数据时,过滤器范围都不会更新。 有什么办法可以让我绕过这件事吗?作为上面更新函数的一部分,我能否以编程方式更新过滤器范围?