【问题标题】:Apps Script run onEdit on specific tab/sheet only [duplicate]Apps 脚本仅在特定选项卡/工作表上运行 onEdit [重复]
【发布时间】:2020-09-23 09:16:52
【问题描述】:

我相信这个问题有一个非常简单的答案;

我有一个可以完美运行的函数,但是它仅在函数名称为“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());                                                                         }
                        }

【问题讨论】:

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


    【解决方案1】:
    • onEdit 是一个关键字,定义函数绑定到一个简单的onEdit trigger

    • 如果您想重命名函数,但要保留该功能,您可以改用installable onEdit 触发器

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

    • 请注意,在 onEdit 上运行多个函数可能会导致冲突,而且几乎没有必要

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

    示例:

    function onEdit(e) {
    if (e.range.getSheet().getName() == "A") {  
      function1();
      }
    else if (e.range.getSheet().getName() == "B") {  
      function2();
      }
    else {  
      function3();
      }
    }
    function function1(){
     Logger.log("The sheet name is A");
    }
    function function2(){
     Logger.log("The sheet name is B");
    }
    function function3(){
     Logger.log("The sheet name is different");
    }
    

    【讨论】:

      【解决方案2】:

      您有两种选择:

      • 您可以为现有的onEdit(e) 函数创建额外的 if 条件来执行不同的 编辑不同工作表时的代码。
      • 您可以创建一个主 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)
      ...
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多