Google apps script 气体–“;您无权调用SpreadsheetApp.openById";

Google apps script 气体–“;您无权调用SpreadsheetApp.openById";,google-apps-script,Google Apps Script,我的一个脚本使用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)

我的一个脚本使用
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()
}
您不能“授予脚本打开文件的权限”,因为脚本不是自治的:用户执行脚本。如果导致脚本执行的用户以不提供授权的方式执行,例如执行名为
onOpen
onEdit
的函数等简单触发器,则需要授权的任何调用都将失败,并出现基于权限的错误,如您共享的错误

由于对每个应用程序脚本实例都评估全局,因此始终建议避免在全局范围内调用API/服务调用。此外,由于简单触发器适用于任何具有编辑文档权限的用户,因此建议避免在限制
AuthMode
s的情况下使用需要用户权限的方法

  • 警告:当运行
    onOpen(e)
    函数时,将加载整个脚本并执行所有全局语句。这些语句在与onOpen(e)相同的授权模式下执行,如果模式禁止,则会失败。这会阻止onOpen(e)运行。如果您发布的加载项未能添加其菜单项,请查看浏览器的JavaScript控制台,查看是否引发了错误,然后检查您的脚本,查看
    onOpen(e)
    函数或全局变量是否调用
    AuthMode.NONE
    中不允许的服务

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

由于对每个应用程序脚本实例都评估全局,因此始终建议避免在全局范围内调用API/服务调用。此外,由于简单触发器适用于任何具有编辑文档权限的用户,因此建议避免在限制
AuthMode
s的情况下使用需要用户权限的方法

  • 警告:当运行
    onOpen(e)
    函数时,将加载整个脚本并执行所有全局语句。这些语句在与onOpen(e)相同的授权模式下执行,如果模式禁止,则会失败。这会阻止onOpen(e)运行。如果您发布的加载项未能添加其菜单项,请查看浏览器的JavaScript控制台,查看是否引发了错误,然后检查您的脚本,查看
    onOpen(e)
    函数或全局变量是否调用
    AuthMode.NONE
    中不允许的服务


我给脚本打开文件的权限的意思是给将执行脚本的用户打开/编辑所述文件的权限。感谢globales的提示,不过,我会在他们的电话中尝试修剪并再次检查。这是编辑脚本还是打开脚本?您共享的脚本示例没有终止分号,所以我假设它只是pseudocode@J.G.由于JavaScript ASI,分号是可选的。不过,我强烈建议使用它们。我所说的授予脚本打开文件的权限的意思是授予将执行脚本的用户打开/编辑所述文件的权限。感谢globales的提示,不过,我会在他们的电话中尝试修剪并再次检查。这是编辑脚本还是打开脚本?您共享的脚本示例没有终止分号,所以我假设它只是pseudocode@J.G.由于JavaScript ASI,分号是可选的。不过,我们强烈推荐它们。