我的一个脚本使用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
的函数之类的简单触发器 - 那么任何需要授权的调用都将失败并且基于权限像你分享的错误。
由于为每个Apps Script实例评估全局变量,因此始终建议避免在全局范围内调用API / Service调用。此外,由于对具有编辑文档权限的任何用户执行简单触发器,因此建议避免在受限制的AuthMode
s的情况下使用需要用户权限的方法。
onOpen(e)
函数时,将加载整个脚本并执行任何全局语句。这些语句在与onOpen(e)
相同的授权模式下执行,如果模式禁止它们则失败。这可以防止onOpen(e)
运行。如果您发布的加载项无法添加其菜单项,请查看浏览器的JavaScript控制台以查看是否抛出了错误,然后检查您的脚本以查看onOpen(e)
函数或全局变量是否调用AuthMode.NONE
中不允许的服务。AuthMode