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

问题描述 投票:-1回答:1

我在跟踪器中使用了2个函数。 1函数用于在编辑该列中的单元格时自动按日期(最早的第一个)对列C进行排序。如果在该单元格中输入“done”或“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个不同的脚本插入,然后使用项目触发器进行“编辑”。不确定这是不是最好的方法?

google-apps-script google-sheets
1个回答
1
投票

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

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

function onEdit(e) {
   movedonevoid(e);
   sorttracker(e);
}
© www.soinside.com 2019 - 2024. All rights reserved.