При перемещении строк с помощью скрипта через проверку данных иногда берется строка ниже, когда это не должно быть - PullRequest
0 голосов
/ 26 февраля 2020

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

Это для праздничного листа. В столбце A у вас есть имя, в столбце B - дата начала, а в столбце C - дата окончания. Чтобы позволить менеджерам утвердить или отклонить выходной, существует четвертый столбец, в котором находится проверка данных. Параметры проверки данных: «Одобрено» или «Отклонено». После утверждения выходной перейдет на вкладку «Утверждено», чтобы перенести его в календарь с помощью другого сценария. Если он отклонен, он переходит на вкладку «Отклонено» и уведомляет запрашивающую сторону о том, что отпуск был отклонен. Если оставить это поле пустым, он просто останется на этом нейтральном листе.

Однако проблема заключается в том, что когда менеджер утверждает выходной, иногда сценарий берет нижний ряд с ним при переходе к «Утверждено» или «Утверждено». Отклоненные вкладки, и это вызывает много путаницы . К счастью, автоматизация, основанная на листе «Утверждено», перемещает праздник в календарь только тогда, когда в четвертом столбце написано «Утверждено». Но мне действительно нужно исправить, и я не уверен, как это сделать.

Сценарий, который я использую для перемещения строки на вкладку:

   function onEdit(event) {
  // assumes source data in sheet named main
  // target sheet of move to named Completed
  // getColumn with check-boxes is currently set to column 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Submitted" && r.getColumn() == 11 && r.getValue() == "Approved") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Approved");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  } else if(s.getName() == "Submitted" && r.getColumn() == 11 && r.getValue() == "Declined") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Declined");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

Этот скрипт был замечен в https://support.google.com/docs/thread/24467278?hl=en но я немного убрал его, чтобы удовлетворить валидации.

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

1 Ответ

0 голосов
/ 28 февраля 2020

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

Я подозреваю, что это происходит, когда кто-то использует Клавиатуру вместо мыши выбрать Утверждено (не потому, что аппаратное обеспечение имеет значение, но способ выбора может отличаться). Ваш код ищет активный диапазон для определения строки. Поэтому, если я перейду к ячейке, в которой я выберу «Одобрено», а затем наберу «а» и нажму клавишу «Ввод», активной строкой при запуске сценария будет строка ниже (нажатие клавиши «Ввод» перемещает выделение в ячейку ниже). Должно быть достаточно легко проверить это.

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