GAS“您无权调用openById”

时间:2015-06-02 04:27:06

标签: google-apps-script google-sheets custom-function

问题:当我运行脚本时,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. 


}

6 个答案:

答案 0 :(得分:6)

我发现这张官方说明我认为可以解决造成这个问题的原因。

如果您的功能是自定义功能,可以像工作表本身中的常规电子表格功能一样使用,那么它对事物的访问权限有限,无法打开其他电子表格。

相同的脚本可以但是可以从菜单按钮或类似按钮打开其他电子表格。

链接:Documentation at developers.google.com

答案 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 调用两个电子表格。第一次跑步时,我的脸上带着微笑,因为它要求授权。此后一帆风顺。