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

时间:2013-02-13 06:49:23

标签: google-apps-script google-sheets

我有一个谷歌电子表格,有两张名为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上。第二张表中的数据,露西,是不一样的,所以一旦我解决了这个问题,我将为那个创建另一个不同范围的脚本。

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

3 个答案:

答案 0 :(得分: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}
...

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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