【问题标题】:URLfetch in an event failing事件中的 URLfetch 失败
【发布时间】:2013-12-25 19:23:48
【问题描述】:

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

var resp = UrlFetchApp.fetch(url, {"method": "get","muteHttpExceptions":false});

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

mydoc.getActiveSheet().getRange(15, 1).setValue("Some debug message");

我将它放置在整个方法中,以查看它在哪里死亡。我在UrlFetchApp.fetch() 方法之后有一个从不写入的声明,所以我知道这就是问题所在。您可以在活动期间拨打这些类型的电话吗?

同样,通过脚本编辑器手动运行它也可以正常工作,但从onEdit 调用时就不行了。

我看到this question 他们不允许这样做,但线程中的最后一条评论说他通过将另一个自定义方法附加到 onEdit 来使其工作。我从另一种方法调用URLFetchApp,但我尝试创建一个myOnEdit 函数,并从那里调用URLFetchApp,但它仍然失败。不知道他手动附加到事件是什么意思...

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    使用简单的触发器:

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

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

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

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

    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
    */
    

    【讨论】:

    • 优秀。当你发布它时,我正在阅读所有这些。我从未使用过Execution transcript。学到了两个新东西,谢谢!
    • 还要确保配置自定义 onEdit 函数 myOnEdit 以用作触发器。转到资源>所有触发器,添加新触发器,设置函数名称,事件:来自电子表格,编辑触发器
    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多