事件中的URLfetch失败

Nat*_*han 3 google-sheets google-apps-script

我在单元格中有两个组合框,由工作表中的范围填充.当第一个更改时,我构建一个URL并调用:

var resp = UrlFetchApp.fetch(url, {"method": "get","muteHttpExceptions":false});
Run Code Online (Sandbox Code Playgroud)

它填充了控制第二个组合框的第二个范围.这在调试模式下工作得很好.但我的目标是使用该onEdit模式.如果更改了第一个组合框,则该方法将运行并填充第二个组合框.使用此声明:

mydoc.getActiveSheet().getRange(15, 1).setValue("Some debug message");
Run Code Online (Sandbox Code Playgroud)

我把它放在整个方法中,看它死了.我在一个UrlFetchApp.fetch()永不写入的方法后面有一个声明,所以我知道这就是问题所在.您可以在活动期间进行这些类型的通话吗?

同样,它可以通过脚本编辑器手动运行它,但是从调用时不能onEdit.

我看到这个问题他们不允许它,但是线程中的最后一条评论说他通过将另一个自定义方法附加到onEdit来实现它.我URLFetchApp从另一个方法调用,但我尝试创建一个myOnEdit函数,并URLFetchApp从那里调用,但它仍然失败.不确定手动附加到活动的意思是什么......

wch*_*ito 14

使用简单的触发器:

function onEdit(e) {
  var response = UrlFetchApp.fetch('http://www.google.com/');
  Logger.log(response.getContentText());
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误(查看 - >执行记录):

Execution failed: You do not have permission to call fetch (line 2, file "Code") [0.008 seconds total runtime]
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方法是创建可安装的触发器:

function myOnEdit(e) {
  var response = UrlFetchApp.fetch('http://www.google.com/');
  Logger.log(response.getContentText());
}

/*
In the Spreadsheet, create new trigger:
Run: myOnEdit
Events: From spreadsheet
On edit
*/
Run Code Online (Sandbox Code Playgroud)

  • 出色的。当你发布它时我刚刚读完所有这些。我从未使用过“执行记录”。学到了两个新东西,谢谢! (2认同)