Аналогичные сценарии OnEdit и OnEdit2 не работают вместе - PullRequest
2 голосов
/ 25 июня 2019

Я использую функцию Google Scripts в Google Sheets для копирования строк с одного листа на другой на основе определенных критериев. По сути, я хочу переместить «Запросы» в Архив или в Подтвержденный пул. Из подтвержденного пула я хочу переместить их в архив после их завершения.

Я пытался перемещать код несколькими способами, включая разделение его на разные сценарии и сохранение его в одном и том же сценарии. Части кода работают одновременно - например, я обычно могу перемещать запросы в подтвержденный пул или в архив. Сначала я думал, что проблема в том, что я использовал один и тот же столбец на разных листах. Я изменил это, но это не исправило код. Затем я обнаружил, что несколько сценариев "onEdit" не могут выполняться на одном листе, поэтому я изменил имя одного из них на onEdit2, а затем на "myBookingRequests". Это изменение тоже не сработало.

Код имеет тенденцию ломаться, когда я пытаюсь переместить что-либо из подтвержденного пула в архив, поэтому теперь я думаю, что проблема в том, что я перемещаю строки в лист и беру строки из листа. Любая помощь о том, как решить эту проблему или удалить конфликты из кодов, поможет. Спасибо.

Два сценария разделены:

  1.     function onEdit(event) {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var s = event.source.getActiveSheet();
        var r = event.source.getActiveRange();
    
           if(s.getName() == "Booking Requests" && r.getColumn() == 12 && r.getValue() == "Y") {
            var row = r.getRow();
            var numColumns = s.getLastColumn();
            var targetSheet = ss.getSheetByName("Confirmed Bookings");
            var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
            s.getRange(row, 1, 1, numColumns).copyTo(target);
            s.deleteRow(row); }
    
          if(s.getName() == "Booking Requests" && r.getColumn() == 13 && r.getValue() == "Y") {
           var row = r.getRow();
           var numColumns = s.getLastColumn();
           var targetSheet = ss.getSheetByName("Archived Bookings");
           var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
           s.getRange(row, 1, 1, numColumns).copyTo(target);
           s.deleteRow(row); }
        }
    
  2. function onEdit2(event) {
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var s = event.source.getActiveSheet();
     var r = event.source.getActiveRange(); 
    
     if(s.getName() == "Confirmed Bookings" && r.getColumn() == 14 && r.getValue() == "Y") {
      var row = r.getRow();
      var numColumns = s.getLastColumn();
      var targetSheet = ss.getSheetByName("Archived Bookings");
      var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
      s.getRange(row, 1, 1, numColumns).copyTo(target);
      s.deleteRow(row); }
    
    if(s.getName() == "Confirmed Bookings" && r.getColumn() == 15 && r.getValue() == "Y") {
     var row = r.getRow();
     var numColumns = s.getLastColumn();
     var targetSheet = ss.getSheetByName("Archived Bookings");
     var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
     s.getRange(row, 1, 1, numColumns).copyTo(target);
     s.deleteRow(row); }
    

    }

Объединить сценарии просто, так как мне просто нужно добавить два дополнительных предложения if под тем же заголовком.

Я не получил никаких реальных сообщений об ошибках, поэтому я предполагаю, что некоторые части кода негативно взаимодействуют с другими. Любая помощь по предотвращению конфликта кода будет отличной. Спасибо.

(Кроме того, я очень неопытный. Я делаю это только тогда, когда мне нужно сделать функциональные таблицы для работы.)

Журнал выполнения после отделения проблемной области (Запросы на бронирование -> Подтвержденные заказы):

 [19-07-03 14:20:54:610 CDT] Starting execution
 [19-07-03 14:20:54:617 CDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
 [19-07-03 14:20:54:618 CDT] SpreadsheetApp.getActive() [0 seconds]
 [19-07-03 14:20:54:619 CDT] Spreadsheet.getActiveSheet() [0 seconds]
 [19-07-03 14:20:54:620 CDT] SpreadsheetApp.getActive() [0 seconds]
 [19-07-03 14:20:54:620 CDT] Spreadsheet.getActiveRange() [0 seconds]
 [19-07-03 14:20:54:693 CDT] Sheet.getName() [0.072 seconds]
 [19-07-03 14:20:54:694 CDT] Range.getColumn() [0 seconds]
 [19-07-03 14:20:54:788 CDT] Range.getValue() [0.093 seconds]
 [19-07-03 14:20:54:788 CDT] Range.getRow() [0 seconds]
 [19-07-03 14:20:54:875 CDT] Sheet.getLastColumn() [0.086 seconds]
 [19-07-03 14:20:54:876 CDT] Spreadsheet.getSheetByName([Confirmed Requests]) [0.001 seconds]
 [19-07-03 14:20:54:975 CDT] Sheet.getLastRow() [0.098 seconds]
 [19-07-03 14:20:54:976 CDT] Sheet.getRange([995, 1]) [0 seconds]
 [19-07-03 14:20:54:977 CDT] Sheet.getRange([4, 1, 1, 12]) [0 seconds]
 [19-07-03 14:20:54:977 CDT] Range.copyTo([Range]) [0 seconds]
 [19-07-03 14:20:55:084 CDT] Sheet.deleteRow([4]) [0.106 seconds]
 [19-07-03 14:20:55:094 CDT] Execution failed: The coordinates of the target range are outside the dimensions of the sheet. (line 12, file "Code") [0.47 seconds total runtime]

1 Ответ

0 голосов
/ 04 июля 2019

Этот код является одним onEdit (e).

Код работает в соответствии с предложением OP и включает в себя многочисленные операторы Logger, которые позволят OP устранять неисправности значений на различных этапах и определять причину любых ошибок.


function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var eVal = event.value;
  var eSheet = event.source.getActiveSheet().getName();
  var ecolumnStart = event.range.columnStart;
  var erowStart = event.range.rowStart;
  var erowEnd = event.range.rowEnd;
  var ecolumnEnd = event.range.columnEnd;
  Logger.log("DEBUG: the spreadsheet is "+event.source.getName()+", the sheet = "+eSheet);
  Logger.log("DEBUG: Range details - Column Start:"+ecolumnStart+", Column End:"+ecolumnEnd+", Row start:"+erowStart+", and Row End:"+erowEnd);
  Logger.log("DEBUG: The Range = "+event.range.getA1Notation()+", and the value = "+eVal);
 //Logger.log(JSON.stringify(event))

  // STEP#1
  // Sheet=Booking Requests
  // AND
  // column = L (12)
  // AND
  // value = "Y"

  if(s.getName() == "Booking Requests" && r.getColumn() == 12 && r.getValue() == "Y") {

    Logger.log("DEBUG: step 1 - if worked");

    var row = r.getRow();
    var numColumns = s.getLastColumn();
    Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);

    var targetSheet = ss.getSheetByName("Confirmed Bookings");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    Logger.log("DEBUG: target range = "+target.getA1Notation());

    s.getRange(row, 1, 1, numColumns).copyTo(target);
    s.deleteRow(row); 
  }
  else{
    Logger.log("DEBUG: step 1 - if failed");
  }

  // STEP#2
  // Sheet=Booking Requests
  // AND 
  // Column = 13 (M)
  // AND
  // VALUE = "Y"

  if(s.getName() == "Booking Requests" && r.getColumn() == 13 && r.getValue() == "Y") {

    Logger.log("DEBUG: step 2 - if worked");

    var row = r.getRow();
    var numColumns = s.getLastColumn();
    Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);

    var targetSheet = ss.getSheetByName("Archived Bookings");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    Logger.log("DEBUG: target range = "+target.getA1Notation());

    s.getRange(row, 1, 1, numColumns).copyTo(target);
    s.deleteRow(row); 
  }
  else
  {
    Logger.log("DEBUG: step 2 - if failed");
  }

  // STEP#3
  // Sheet=Confirmed Bookings
  // AND
  // column = N (14)
  // AND
  // value = "Y"
  if(s.getName() == "Confirmed Bookings" && r.getColumn() == 14 && r.getValue() == "Y") {

    Logger.log("DEBUG: step 3 - if worked");

    var row = r.getRow();
    var numColumns = s.getLastColumn();
    Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);

    var targetSheet = ss.getSheetByName("Archived Bookings");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);

    s.getRange(row, 1, 1, numColumns).copyTo(target);
    s.deleteRow(row); 
  }
  else
  {
    Logger.log("DEBUG: step 3 - if failed");
  }

  // STEP#4
  // Sheet=Confirmed Bookings
  // AND
  // column = O (15)
  // AND
  // value = "Y"


  if(s.getName() == "Confirmed Bookings" && r.getColumn() == 15 && r.getValue() == "Y") {

    Logger.log("DEBUG: step 4 - if worked");

    var row = r.getRow();
    var numColumns = s.getLastColumn();
    Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);    

    var targetSheet = ss.getSheetByName("Archived Bookings");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);

    s.getRange(row, 1, 1, numColumns).copyTo(target);
    s.deleteRow(row); 
  }
   else
  {
    Logger.log("DEBUG: step 4 - if failed");
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...