Zapier更新工作表时运行onEdit触发器

时间:2017-08-28 14:09:21

标签: google-apps-script google-sheets zapier

我有一个Google电子表格,我希望每次Zapier自动化添加新行时都会自动更新一个字段。

每次我通过添加行或对现有行进行编辑来手动测试脚本时,脚本都会按预期触发。但是,当Zapier在电子表格中添加新行时,绝对没有任何反应。

我知道为什么以及如何解决这个问题?

这是我尝试使用的脚本:

function onEdit(e) {
    var row = e.range.getRow();
    SpreadsheetApp.getActiveSheet().
        getRange(row, 10).setValue('My_New_Value');
}

1 个答案:

答案 0 :(得分:2)

我能够复制您在脚本中看到的行为。我相信当你在活动数据范围之外添加一行时,它不会触发编辑事件。为了捕捉这些事件,你还需要捕捉chagne事件。

https://developers.google.com/apps-script/reference/script/spreadsheet-trigger-builder#onchange

function onOpen ()
{ 
  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("myFunctionx")
   .forSpreadsheet(sheet)
   .onChange()
   .create();
 }

查看更改事件的文档,您可以检测到插入了一行,但未返回行号。

https://developers.google.com/apps-script/guides/triggers/events#change

function myFunctionx(e) {
    Logger.log("Change3");
    Logger.log(e.changeType);
}

您可以通过查看活动范围中的最后一行来找到插入的行。

function myFunctionx(e) {
    Logger.log("Change3");
    Logger.log(e.changeType);
    Logger.log(SpreadsheetApp.getActiveRange().getLastRow());
}

如果复制并粘贴到多个单元格中,则更改可能会影响多行。你应该遍历你范围内的所有行。

function onEdit(e) {
    for(var i=e.range.getRow(); i<= e.range.getLastRow(); i++) {
        SpreadsheetApp.getActiveSheet().
            getRange(i, 10).setValue(e.range.getA1Notation());
    }
}