Google Apps脚本URLFetchApp权限

时间:2019-05-05 21:25:32

标签: google-apps-script permissions

我是GAS的新手,我在权限系统方面感到困惑。

我是Google驱动器的普通用户,因此我启动了一个电子表格,并尝试向其中添加一些代码。我的代码有效,但前提是我在代码编辑器中。我想使用onEdit()函数,因此对我来说很重要的一点是它也可以在工作表中使用。当我第一次在编辑器中运行代码时,它打开了一个新窗口,我需要在其中输入凭据以允许脚本,然后它才能工作。如果我对工作表中的单元格进行了一些更改,并且触发了onEdit()函数,我将收到一条错误消息,内容如下所示:

Exception: You are not permitted to call UrlFetchApp.fetch. Required permission: https://www.googleapis.com/auth/script.external_request

在编辑器中,我显示了清单文件,并向oauthScopes添加了权限,但是在工作表中,我仍然收到消息。这是我的代码(简化):

function onEdit(e)
{
    var data = {
        'key1': 'value1',
        'key2': 'value2'
    };
    var options = {
        'method' : 'post',
        'contentType': 'application/json',
        'payload' : JSON.stringify(data)
    };
    try{
        var response = UrlFetchApp.fetch('https://a-working-url.com', options); //error happening in this line
        //some more data wizardry
    }catch(error)
    {
        Browser.msgBox(error)
    }

}

有什么想法可以在工作表中打开此权限屏幕,或者有任何提示如何以其他方式解决它?我想创建一个工作表,并在后台在线运行一些代码。我想与一些朋友分享该工作表,在我意识到它不能用于Excel Online之前,先在Excel和VBA上进行了尝试,所以我改用GAS。

在此先感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

请改用可安装触发器,并编写您自己的“ onEdit”函数(使用不同的名称),并将其绑定到可安装触发器。

https://developers.google.com/apps-script/guides/triggers/installable#g_suite_application_triggers

这为我解决了这个问题。

答案 1 :(得分:0)

与所有简单触发器一样,

onEdit()受以下限制(see official documentation)约束:

  
      
  • 该脚本必须绑定到Google表格,幻灯片,文档或表格文件,否则必须是扩展其中之一的附件   应用程序。
  •   
  • 如果以只读(查看或评论)模式打开文件,它们将不会运行。
  •   
  • 脚本执行和API请求不会导致触发器运行。例如,调用Range.setValue()编辑单元格不会导致   电子表格的onEdit触发器即可运行。
  •   
  • 他们无法访问需要授权的服务。例如,简单触发器无法发送电子邮件,因为Gmail   服务需要授权,但是一个简单的触发器就可以翻译   语言服务中的一个短语,它是匿名的。
  •   
  • 他们可以修改绑定到的文件,但无法访问其他文件,因为这需要授权。
  •   
  • 他们可能无法确定当前用户的身份,具体取决于一组复杂的安全性限制。
  •   
  • 它们的运行时间不能超过30秒。
  •   
  • 在某些情况下,编辑器加载项会在无授权模式下运行其onOpen(e)和onEdit(e)简单触发器,这会带来一些其他复杂性 < em>。有关更多信息,请参见指南   附加授权生命周期。
  •   
  • 简单触发器受Apps脚本触发器配额限制。
  •   

以粗体突出显示的内容适用于您的问题。

基本上,它可以归结为这一点-UrlFetchApp.fetch()是一项需要授权的服务,因此即使设置了关联的作用域,您也无法从onEdit(e)触发器执行该服务在清单文件中。