Apps脚本仅在特定标签/工作表上运行onEdit

时间:2020-09-23 09:16:52

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

我敢肯定,这个问题的答案很简单;

我有一个功能完美的函数,但是仅当函数名称为'onEdit'时才起作用,这不是我想要的,因为我想为不同的选项卡创建类似的函数,因此检查表名的第一行可以有人请指出我的错误方式:-)谢谢。

function onEdit(e) {
if (e.range.getSheet().getName() != "PrintNoteLines") {  
  return}
    var sh = e.source.getActiveSheet()
    if (sh.getName().indexOf('PrintNoteLines') > -1 && e.range.getA1Notation() == 'B1' && e.value) {
        sh.getRange('A25:A183')
                .setDataValidation(SpreadsheetApp.newDataValidation()
                .requireValueInRange(e.source.getRangeByName(e.value), true)
                .setAllowInvalid(false)
                .build());                                                                         }
                        }

2 个答案:

答案 0 :(得分:2)

  • Repository是一个关键字,定义该功能绑定到一个简单的onEdit触发器](https://developers.google.com/apps-script/guides/triggers#onedite

  • 如果要重命名功能,但要保持功能性,可以改用installable onEdit触发器

  • 请参阅here如何将其绑定到重命名的函数

  • 请注意,在onEdit上运行多个功能会导致冲突,并且多数情况下没有必要

  • 如有必要,您可以从onEdit触发函数内部调用其他函数

示例:

onEdit

答案 1 :(得分:1)

您有两个选择:

  • 您可以为现有onEdit(e)函数创建其他条件,以执行不同的操作 编辑不同工作表时输入代码。
  • 您可以创建一个主要的onEdit(e)触发器函数,该函数可以为所有其他functionName(e)供稿。

例如:

将当前代码的功能重命名为myFunction1(e)

function myFunction1(e) {
if (e.range.getSheet().getName() != "PrintNoteLines") {  
  return}
    var sh = e.source.getActiveSheet()
    if (sh.getName().indexOf('PrintNoteLines') > -1 && e.range.getA1Notation() == 'B1' && e.value) {
        sh.getRange('A25:A183')
                .setDataValidation(SpreadsheetApp.newDataValidation()
                .requireValueInRange(e.source.getRangeByName(e.value), true)
                .setAllowInvalid(false)
                .build());                                                                         }
                        }

,然后像这样从onEdit(e)函数中馈入event object

function onEdit(e){
myFunction1(e) 
}

通过这种方式,您可以在编辑后执行多个功能:

function onEdit(e){
myFunction1(e);
myFunction2(e);
myFunction3(e)
...

}