onEdit()将行移至其他工作表有时会将行移至目标行下方

时间:2019-07-18 10:20:00

标签: google-apps-script

我已经创建了一个onEdit()函数,该函数将根据“状态”列的值将目标行移动到另一张工作表。它似乎工作正常……但有时在随机时刻,当状态列更改且目标行下方的行随之移动到另一张工作表时,该函数运行。无法找到问题的根源。

我似乎找不到代码中的缺陷,所以我想知道这是否与以下事实有关:该工作表中有多个人在工作,以及getRowIndex()如何弄乱。

 function onEdit(e) {
  
  

    var ss = e.source;
      var s = ss.getActiveSheet();
      var r = e.range;
       
      // where the action and move columns are in the form responses sheet
      var actionCol = 1;
      var nameCol = 1;
     
      // Get the row and column of the active cell.
      var rowIndex = r.getRowIndex();
      var colIndex = r.getColumnIndex();

       
      // Get the number of columns in the active sheet.
     
      var colNumber = s.getLastColumn();
       
      // if our action/status col is changed to Nieuw do stuff
      if (e.value == "Nieuw" && colIndex == actionCol) {
        // get our target sheet name - in this example we are using the priority column
        var targetSheet = s.getRange(rowIndex, nameCol).getValue();
        // if the sheet exists do more stuff
        if (ss.getSheetByName(targetSheet)) { 
          // set our target sheet and target range
          var targetSheet = ss.getSheetByName(targetSheet);
          var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1, 1, colNumber);
          // get our source range/row
          var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
         
          sourceRange.copyTo(targetRange);
         
          s.deleteRow(rowIndex);
          
        }
      }
}

1 个答案:

答案 0 :(得分:0)

代替获取目标工作表的范围,而是使用copyTo() https://developers.google.com/apps-script/reference/spreadsheet/

此外,由于多个人正在使用电子表格,因此您应该实施锁定服务。 sheet.appendRow(1D Array);是原子的,因此不需要锁定服务,但是对于多个用户而言,获取源范围可能是一个问题。 参见How do I use LockService properly every time in Google Apps Script?