首页 > 解决方案 > GAS - “您无权调用 SpreadsheetApp.openById”

问题描述

我的一个脚本用于SpreadsheetApp.openById(ID)从电子表格中获取数据。该脚本已被授予打开文件的权限,并且该脚本的用户对该文件具有写入权限。但是,有时,脚本会返回以下错误:

You do not have permission to call SpreadsheetApp.openById. Required permissions: https://www.googleapis.com/auth/spreadsheets at [unknown function](Code:11)

其他时候,没有问题,脚本运行良好。有关如何解决此问题的任何想法/帮助?

脚本示例:

var spreadsheet = SpreadsheetApp.openById("1m65QVfk9Xx2zOwUxewdSjWCDK-g_jHj7ETFVFF0rjxY")

function myFunc() {
  sheet = spreadsheet.getActiveSheet()
  prepareHours()
  inputDisplays()
}

标签: google-apps-script

解决方案


您不能“授予脚本打开文件的权限”,因为脚本不是自主的:用户执行脚本。如果导致脚本执行的用户以不提供授权的方式执行此操作——例如执行一个简单的触发器,如名为onOpen或的函数onEdit——那么任何需要授权的调用都将失败,并出现基于权限的错误,例如你分享的那个。

由于针对每个 Apps 脚本实例评估全局变量,因此始终建议避免在全局范围内调用 API / 服务调用。此外,由于简单触发器对任何有权编辑文档的用户执行,因此建议避免在具有受限AuthModes 的情况下使用需要用户权限的方法。

  • 简单的触发限制
  • 执行用户
  • 无障碍服务

    警告:当您的onOpen(e)函数运行时,会加载整个脚本并执行所有全局语句。这些语句在相同的授权模式下执行,onOpen(e)如果模式禁止它们,则会失败。这可以防止onOpen(e)运行。如果您发布的插件无法添加其菜单项,请查看浏览器的 JavaScript 控制台以查看是否引发了错误,然后检查您的脚本以查看onOpen(e)函数或全局变量是否调用了AuthMode.NONE.

  • AuthMode


推荐阅读