【问题标题】:How do I apply a script to only one sheet within a google spreadsheet如何将脚本仅应用于谷歌电子表格中的一张工作表
【发布时间】:2013-02-13 06:49:23
【问题描述】:

我有一个谷歌电子表格,里面有两张表格,分别是 Robin 和 Lucy。 每次我将一些数据添加到 A 列时,我都制作/找到/修改了一个脚本来对工作表上的数据进行排序

function onEdit(event){

  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "a2:I30";
    if(editedCell.getColumn() == columnToSortBy){   
   var range = sheet.getRange(tableRange);
   range.sort( { column : columnToSortBy } );
  }
}

这个脚本很好用,但我只希望它应用在第一张纸上,Robin。第二张表 Lucy 中的数据不一样,所以一旦我解决了这个问题,我将为该表的不同范围创建另一个脚本。

我想我需要使用 getSheetByName("Robin") 但我似乎无法让它工作。 提前致谢

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    你可以把你的整个函数置于这样的状态:

    function onEdit(event){
    
      var sheet = event.source.getActiveSheet();
      if(sheet.getName()=='Robin'){
      var editedCell = sheet.getActiveCell();
    
      var columnToSortBy = 1;
      var tableRange = "a2:I30";
        if(editedCell.getColumn() == columnToSortBy){   
       var range = sheet.getRange(tableRange);
       range.sort( { column : columnToSortBy } );
      }
    }
    }
    

    或者如果条件为假,您也可以返回,如下所示

    ...
      var sheet = event.source.getActiveSheet();
      if(sheet.getName()!='Robin'){return}
    ...
    

    这两种方法的工作方式相同。

    【讨论】:

      【解决方案2】:

      onEdit 收到的event object 转发到处理所需工作表上的事件的特定函数。

      function onEdit(event) {
          var name = event.range.getSheet().getName();
          switch (name) {
            case "Robin":
              updateRobin(event);
              break;
            case "Lucy":
              updateLucy(event);
              break;
          }
      }
      
      function updateLucy(event) {
          // Code designed to handle edits to the "Lucy" sheet.
      }
      
      function updateRobin(event) {
          // Code designed to handle edits to the "Robin" sheet.
      }
      

      【讨论】:

        【解决方案3】:

        我还建议替换这一行: var tableRange = "a2:I30"; 有了这个: var tableRange = sheet.getDataRange();

        随着范围的扩大,getDataRange() 返回的范围将进行调整以适应它。无需使用硬编码地址,代码更灵活

        仅供参考: 我在这里找到了一些有用的例子:

        http://www.javascript-spreadsheet-programming.com

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-29
          • 2012-06-15
          • 1970-01-01
          • 2012-12-30
          • 2020-06-17
          • 1970-01-01
          • 2013-12-27
          相关资源
          最近更新 更多