【问题标题】:Script fails on SpreadsheetApp.openById - Requires permissionSpreadsheetApp.openById 上的脚本失败 - 需要权限
【发布时间】:2019-09-20 09:32:18
【问题描述】:

我有一个在电子表格中创建自定义菜单的 onOpen 函数。它已经运行了一年多,但几天前它停止了工作。

当我查看执行记录时,我得到:

“执行失败:您没有调用SpreadsheetApp.openById的权限。所需权限:https://www.googleapis.com/auth/spreadsheets

这失败/与以下代码行有关:

var ss = SpreadsheetApp.openById("myID")

我检查了启用了哪些 API,并启用了表格,这反映在 .json 文件中。我在脚本中的任何地方都没有@OnlyCurrentDoc。我已经为此脚本重置了帐户的权限,再次运行该函数并允许权限,但菜单仍然不会在打开时创建。

我的 .json 文件:

{
"timeZone": "Europe/London",
"dependencies": {
"enabledAdvancedServices": [{
  "userSymbol": "Sheets",
  "serviceId": "sheets",
  "version": "v4"
 }]
},
"exceptionLogging": "STACKDRIVER"
}

【问题讨论】:

标签: google-apps-script oauth google-api triggers


【解决方案1】:

出现此错误是因为代码没有足够的权限来运行该方法。 openById 方法需要一个或多个 this 范围。您的清单 .JSON 应如下所示:

{
  "timeZone": "Europe/London",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Sheets",
      "serviceId": "sheets",
      "version": "v4"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets"
  ]
}

请注意我是如何在文件末尾添加范围的。请不要犹豫,要求对此答案进行更多说明。

【讨论】:

  • 范围检测和添加将自动发生。 OP 的问题可能是使用了简单的onOpen() 触发器,它没有打开其他电子表格的权限。
  • @TheMaster 如何授予触发器权限? Jacques-Guzel Heron - 我之前确实尝试将它添加到我的 json 中,但没有任何区别,所以我把它拿回来了。当我手动运行该功能时,它工作正常。
  • @Aidan 查看上面的重复问题。您需要“可安装的触发器”。阅读手动管理触发器
  • @Aidan 从 [可安装触发器][1] 的文档中我读到“当用户打开他们有权编辑的电子表格 [...] 时,可安装的打开触发器运行”。所以只是为了确保我没有遗漏任何东西,你能确认你是那个文件的所有者吗? [1]:developers.google.com/apps-script/guides/triggers/…
  • @Aidan remove trigger> 将 onOpen() 重命名为 installableOpen() > 在 script.google.com/home/triggers 中手动打开新函数时创建触发器。
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2014-12-24
  • 2023-03-29
  • 2020-04-27
  • 1970-01-01
  • 2021-04-18
  • 2023-04-04
  • 2021-01-08
相关资源
最近更新 更多