Google Apps 脚本 URLFetchApp 权限

use*_*121 0 permissions google-apps-script

我是 GAS 的新手,我在权限系统方面很挣扎。

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

Exception: You are not permitted to call UrlFetchApp.fetch. Required permission: https://www.googleapis.com/auth/script.external_request
Run Code Online (Sandbox Code Playgroud)

在编辑器中,我显示了清单文件并向 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)
    }

}
Run Code Online (Sandbox Code Playgroud)

任何想法如何在我的工作表中打开此权限屏幕或任何提示如何以不同的方式解决它?我想创建一个工作表,其中一些代码在后台运行。我想和一些朋友分享表格,之前用 Excel 和 VBA 尝试过,直到我意识到它不适用于 Excel Online,所以我切换到 GAS。

在此先感谢您的帮助 :)

Dim*_*gns 6

onEdit()和所有简单的触发器一样,受到以下限制(参见官方文档):

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

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

基本上,它归结为 -UrlFetchApp.fetch()是一项需要授权的服务,因此您将无法从onEdit(e)触发器执行它,即使您在清单文件中设置了其关联的范围。