Скрипт Google Sheet случайно не завершается - PullRequest
0 голосов
/ 24 августа 2018

У меня есть документ, в котором в любой момент есть около 5 человек. У меня есть 15 отдельных скриптов типа "onEdit (e)". Сценарий, который вы видите ниже, извлекает данные из одной вкладки и перемещает их в другую, когда в соответствующем столбце указано значение «да», введенное пользователем.

Общая форма этого скрипта существует в течение многих месяцев для нескольких других вкладок. Мы дублируем скрипт для каждой новой вкладки. Это работало в течение нескольких месяцев без проблем. Сегодня я попытался дублировать его для этих вкладок "kabazi", но у него есть проблемы.

Обычно это работает, но иногда (когда-то от 5 до 15) происходит сбой. Визуально не удается скопировать данные на другую вкладку; Я использовал строку Browser.msgbox в качестве произвольного отладчика, чтобы увидеть, где происходит сбой скрипта. Я переместил его в коде так, чтобы в зависимости от того, появляется ли окно с сообщением или нет, я знаю, что это был сценарий сбоя (если есть лучший способ, дайте мне знать!).

Интересно, что сценарий на самом деле выходит из строя более чем в 1 месте, но случайно. Например, иногда происходит сбой:

target_sheet.insertRowAfter(last_row); 

в других случаях происходит сбой:

source_sheet.getRange(edited_row, 1, 1, 9).copyTo(target_range); 

это может также провалиться в других местах, но я не зашел так далеко с этим. Моя единственная мысль, возможно, заключается в том, что вызов onEdit (e) для других сценариев происходит в то же время, когда этот сценарий выполняется, и это влияет на производительность. В противном случае я понятия не имею, почему это иногда терпит неудачу. В скрипте нет ошибок.

Есть идеи?

Спасибо.

function onEdit(e){ // <---- (e)
  var edited_range = e.range; 
  var edited_row = edited_range.getRow(); 

  var activeSheet = e.source.getActiveSheet(); 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 

  var source_sheet = ss.getSheetByName("Kabazi Pitches");
  var target_sheet = ss.getSheetByName("Kabazi In Progress"); 
  var last_row = target_sheet.getLastRow(); 

  var range_values = target_sheet.getRange("A1:A").getValues(); 

  var range_length = range_values.filter(String).length + 1;

  var target_range = target_sheet.getRange(range_length,1);


  if (activeSheet.getName() == "Kabazi Pitches") { 
    if (edited_range.getColumn() == 10) { 
      if (edited_range.getValue().toLowerCase() == "yes") {
        target_sheet.insertRowAfter(last_row); 

        Browser.msgBox(edited_range.getColumn()); 

        source_sheet.getRange(edited_row, 1, 1, 9).copyTo(target_range); 

        source_sheet.getRange(edited_row, 10, 1, 2).setValue(""); 
        source_sheet.deleteRow(edited_row)  }}}; // this will delete out the row of data from the Unmarketed tab so it is no longer there. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...