Google表格中的应用脚本脚本使用两个onEdit触发器移动错误的行

时间:2015-12-16 18:08:24

标签: google-apps-script google-sheets

我在跟踪器中使用了2个函数。 1函数用于在编辑该列中的单元格时自动按日期(最早的第一个)对列C进行排序。如果“完成”这个词。或者' void'键入该单元格,然后将整行复制到下一个工作表上。

但是我的问题是,当我输入' done'或者' void'在这个单元格中,Google工作表正在对列表进行排序,并处理移动功能,从而移动错误的行(生成的行号,排序后)。我该如何修复或改进代码。

function movedonevoid(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var value = r.getValue();

  if(s.getName() == "tracker" && r.getColumn() == 3 && (value=="done" || value=="void" )) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("tracker2");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

function sorttracker(event){

  var sheet = event.source.getActiveSheet();
  if(sheet.getName() == 'tracker'){
    var editedCell = sheet.getActiveCell();

    var columnToSortBy = 3;
    var tableRange = "A2:D"; // What to sort.

    if(editedCell.getColumn() == columnToSortBy) {   
      var range = sheet.getRange(tableRange);
      range.sort( { column : columnToSortBy, ascending: true } );
    }
  }
}

我已将上述2位代码作为2个不同的脚本插入,然后在编辑'上使用项目触发器。不确定这是否是最佳方法?

1 个答案:

答案 0 :(得分:1)

正如您已经注意到的那样,让两个不同的函数在同一范围内运行并被两个不同的onEdit触发器调用并不是一个好主意。

不使用两个onEdit触发器,只使用一个调用orchestral conductor函数来调用原来的两个。{3}}函数。 orchestral conductor function可能类似于以下内容:

function onEdit(e) {
   movedonevoid(e);
   sorttracker(e);
}