问题:当我运行脚本时,Google告诉我,“ 您无权调用openById。 ”
我从另一个Google电子表格中复制了一个脚本,并更改了 target_ssKey 变量的单元格引用,并在源和目标电子表格中创建了大小合适的命名范围。
GAS文档没有说明它可能无法正常工作的原因:
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openById%28String%29
另一个GAS文档说它应该为我工作,因为我从自定义菜单中调用它:
https://developers.google.com/apps-script/guides/sheets/functions#using_apps_script_services
上面的第二个链接说:
如果您的自定义函数抛出错误消息 您没有 允许调用X服务。 ,该服务需要用户授权 因此不能用于自定义功能。
要使用上述服务以外的服务,请创建自定义菜单 运行Apps脚本功能而不是编写自定义 功能。从菜单触发的功能将询问用户 必要时进行授权,因此可以使用所有应用程序 脚本服务。
我尝试将该函数放入“自定义函数”项目,然后放入“附加组件”项目,但仍然收到相同的错误消息。
关于我做错了什么以及如何使其发挥作用的任何想法?
这是我的确切代码:
var writeToChars = function (name, characteristics) { // this is passing values from the BLE setup function
// i need to get isAll to here.
// eventually this will write some values from isAll into a scratch bank.
}
答案 0 :(得分:6)
我发现这张官方说明我认为可以解决造成这个问题的原因。
如果您的功能是自定义功能,可以像工作表本身中的常规电子表格功能一样使用,那么它对事物的访问权限有限,无法打开其他电子表格。
相同的脚本可以但是可以从菜单按钮或类似按钮打开其他电子表格。
答案 1 :(得分:6)
我认为我会抛出一个类似的问题,这个问题让我想到了这个问题,我收到了错误You don't have permission to call by openById
。就我而言,我试图调用translate.gs
中的函数,我从这个示例中复制了函数:
https://developers.google.com/apps-script/quickstart/docs
请注意translate.gs
/**
* @OnlyCurrentDoc
*
* The above comment directs Apps Script to limit the scope of file
* access for this add-on. It specifies that this add-on will only
* attempt to read or modify the files in which the add-on is used,
* and not all of the user's files. The authorization request message
* presented to users will reflect this limited scope.
*/
这里的罪魁祸首是@OnlyCurrentDoc
评论。请参阅此处以供参考:
https://developers.google.com/apps-script/guides/services/authorization
删除@OnlyCurrentDoc
为我解决了这个问题
答案 2 :(得分:2)
我可以通过谷歌开发者的这份授权指南解决这个问题。
https://developers.google.com/apps-script/concepts/scopes#setting_explicit_scopes
此条目必须在 json 文件中。
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets.readonly",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/spreadsheets"
],
答案 3 :(得分:1)
没关系,我明白了!
方法openByID可以从"空白项目"但不是表格中的自定义功能"也不是" Google表格附加组件"项目
我想了一个"空白项目"会创建一个没有连接到我的电子表格的项目,但我错了。空白项目已连接到我的电子表格。我尝试使用的其他类型的项目似乎是脚本项目的有限范围版本,无法执行一些GAS方法。
答案 4 :(得分:0)
您只需要将脚本内容复制到注释文档中,然后将所有功能删除到脚本中即可。关闭电子表格,然后将内容再次放入注释文档中的脚本中,再次执行脚本时,Google会要求您同意运行脚本,仅此而已。 某些GAS类需要对脚本进行更新的权限。
答案 5 :(得分:0)
遇到了同样的问题,来分享我的解决方案。就我而言,我有两个电子表格,分别称为 A 和 B。两者都使用绑定到每个电子表格的脚本。电子表格 B 能够将数据写入电子表格 A 的选项卡。但电子表格 A 在尝试从电子表格 B 读取时不断收到“您无权调用 openById”错误。然后我尝试将其添加为自定义菜单项,但还是一样的问题。
结果证明我的解决方案非常简单。我在 script.google.com 中创建了一个新的未绑定脚本,它使用 openById 调用两个电子表格。第一次跑步时,我的脸上带着微笑,因为它要求授权。此后一帆风顺。