如何将脚本仅应用于Google电子表格中的一个工作表

问题描述 投票:2回答:3

我有一个谷歌电子表格,有两张名为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
3个回答
5
投票

你可以把你的整个函数放在这样的条件:

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}
...

两种方法都以相同的方式工作。


0
投票

我还建议更换这一行:var tableRange =“a2:I30”;使用:var tableRange = sheet.getDataRange();

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

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

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


0
投票

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

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.
}
© www.soinside.com 2019 - 2024. All rights reserved.