5

我有一个谷歌电子表格,里面有两张叫做 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 } );
  }
}

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

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

4

3 回答 3

7

您可以将整个函数置于这样的条件下:

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

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

于 2013-02-13T08:02:44.270 回答
2

将接收到的事件对象转发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.
}
于 2018-03-01T01:53:58.537 回答
0

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

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

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

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

于 2013-02-13T09:38:11.387 回答