如何使onEdit()触发器函数适用于多个工作表

时间:2016-01-14 23:56:57

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

我正在处理Google工作表。

我有一个脚本,当我在第一个标签上更新column B时,会在column A中填入时间戳。但是我需要它在第二个选项卡上执行相同操作,但我不能让它在那里工作。我需要改变什么?

我正在使用的当前脚本是:

function onEdit(e) {

    var sheetToWatch= 'Wrong Grading',
        columnToWatch = 1,
        columnToStamp = 2;            //change all of these to your needs

    if (e.range.columnStart !== columnToWatch
      || e.source.getActiveSheet().getName() !== sheetToWatch
      || !e.value)
        return;
    e.source.getActiveSheet()
        .getRange(e.range.rowStart, columnToStamp)
        .setValue(new Date());
}

1 个答案:

答案 0 :(得分:0)

对于未来的读者,Paul的问题中的代码片段来自code on the Google Docs help forum,其中包含详细的逐行说明。

该函数使用变量sheetToWatch来识别onEdit()函数关心的一个工作表(也称为“制表符”)。这种比较证实了这一点:

|| e.source.getActiveSheet().getName() !== sheetToWatch

...如果当前触发事件的源不匹配,则该函数退出而不执行任何操作。

我需要更改哪些内容?如果您希望此功能适用于电子表格中的所有表单,那么您可以完全取消此检查:

function onEdit(e) {

    var columnToWatch = 1,
        columnToStamp = 2;               //change all of these to your needs

    if (e.range.columnStart !== columnToWatch
      || !e.value)
        return;
    e.source.getActiveSheet()
        .getRange(e.range.rowStart, columnToStamp)
        .setValue(new Date());
}

如果您希望onEdit()对一组工作表进行操作,那么您可以更改上面的比较以检查当前工作表的名称是否在工作表名称数组中找到。这将改变对比:

  || sheetsToWatch.indexOf( e.source.getActiveSheet().getName() ) === -1 

您可以详细了解indexOf()方法here。它正在做的是获取事件触发源表的名称,在sheetsToWatch数组中找到它,并返回找到的索引。如果表单未显示在数组中,indexOf()将返回-1

结果函数是:

function onEdit(e) {

    var sheetsToWatch= ['Wrong Grading',
                        'Something Else'],
        columnToWatch = 1,
        columnToStamp = 2;            //change all of these to your needs

    if (e.range.columnStart !== columnToWatch
      || sheetsToWatch.indexOf( e.source.getActiveSheet().getName() ) === -1 
      || !e.value)
        return;
    e.source.getActiveSheet()
        .getRange(e.range.rowStart, columnToStamp)
        .setValue(new Date());
}