Событие при редактировании выполняется один раз, но влияет дважды - PullRequest
1 голос
/ 17 октября 2019

На листе Google у меня есть событие, которое удаляет строку, если выполняются определенные условия.

Но иногда оно удаляет две строки.

На каждом исключении OnEdit я проверяю, если этоправый лист, правый столбец и ожидаемое значение для продолжения.

Глядя на журналы, он запускается только один раз.

/** @OnlyCurrentDoc */

function onEdit(e)
{   
  Logger.log("TESTING TESTING ON EDIT");
  if(SpreadsheetApp.getActiveSpreadsheet().getSheetName() == "Student Info")
  {
    Logger.log("Enter Student Info");
    //Obtenemos donde  se ha realizado el cambio
    var range = e.range;

    //var targetSheet = app.getActiveSpreadsheet.getSheetByName("Archive");

    //targetSheet.appendRow();


    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = e.source.getActiveSheet();
    var r = e.source.getActiveRange();



    if(s.getName() == "Student Info" && r.getColumn() == 8 && r.getValue() == 'Archive') {
      var id= s.getRange(r.getRow(),1).getValue();
      r.setValue('');
      Logger.log("Get ID");
      var row = r.getRow();
      var numColumns = s.getLastColumn();
      var targetSheet = ss.getSheetByName("Archive");
      var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
      s.getRange(row, 1, 1, numColumns).moveTo(target);

      Logger.log("Prior to delete ROW in student info");
      Logger.log(row);
      s.deleteRow(row);
      Logger.log("After Deleting ROW  in student info");


      //Student Tracker
      var st=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Student Tracker")

      for (i=6;i<=st.getLastRow();i++)
      {
        if (st.getRange(i, 1).getValue()==id)
        {
                Logger.log("Prior Deleting ROW  in student tracker");
                st.deleteRow(i);
                Logger.log("After Deleting ROW  in student tracker");
          break;
        }
      }       
      //

      //SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Upwork Request").getRange(range.getRow(),7).setValue(id);
    } else
    {Logger.log("Not  Student Info Or Archive");}
    // SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Upwork Request").getRange(range.getRow(),8).setValue(new Date());

  } else
  {     Logger.log("No Student Info");}
}

Нет сообщений об ошибках, просто иногда удаляются две строки.

РЕДАКТИРОВАНИЕ:

Я просто замечаю в журнале событий, что он не только запускается дважды, но и не заканчивается, я добавил журнал после перерыва, который никогда не нажимается

РЕДАКТИРОВАТЬ2 После того, как пользователь исправил оператор, он все еще работает дважды.

1 Ответ

0 голосов
/ 17 октября 2019

Попробуйте:

Я считаю, что эта строка for (i=6;i++;st.getLastRow()) Должно быть что-то вроде этого for (i=6;i<=st.getLastRow();i++) {

function onEdit(e) {   
  var sh=e.range.getSheet();
  var ss = e.source;
  if(sh.getName() == "Student Info") {
    if(e.range.columnStart==8 && e.value=='Archive') {
      var id=sh.getRange(e.range.rowStart,1).getValue();
      e.range.setValue('');
      var tsh=ss.getSheetByName("Archive");
      var trg=tsh.getRange(tsh.getLastRow() + 1, 1);
      sh.getRange(e.range.rowStart, 1, 1, tsh.getLastColumn()).moveTo(trg);
      sh.deleteRow(e.range.rowStart);
      var st=SpreadsheetApp.getActive().getSheetByName("Student Tracker");
      for (i=6;i<=st.getLastRow();i++) {
        if (st.getRange(i, 1).getValue()==id) {
          st.deleteRow(i);
          return
        }
      }       
    }
  }
  return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...