Google AppScript для перемещения строки при вводе даты - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица Google, в которой есть столбец флажка (26) и столбец даты (27). Есть два активных сценария, которые влияют на эту вкладку.

  1. Когда щелкают флажок (26), у меня есть сценарий, который автоматически добавляет дату (27).
  2. Когда установлен флажок (26), у меня есть сценарий, который перемещает строку на другую вкладку.

Проблема, с которой я сталкиваюсь, заключается в том, что иногда строка перемещается до даты добавлен. (сценарий вставлен ниже)

Как изменить сценарий № 2 таким образом, чтобы строка перемещалась при добавлении любой даты в столбец 27, а не при щелчке флажка в столбце 26?

Any помощь очень ценится:

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 colu 26 or 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "APPROVAL QUEUE" && r.getColumn() == 26 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("COMPLETED ORDERS");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Не допускается наличие двух простых onEdit триггеров в одном проекте

  1. Вам необходимо объединить код двух скриптов в один два, чтобы избежать конфликтного поведения
  2. В чтобы избежать копирования строки до вставки даты - используйте SpreadsheetApp.flu sh ()

Пример реализации двух функций в одном:

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 colu 26 or 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "APPROVAL QUEUE" && r.getColumn() == 26 && r.getValue() == true) {
    s.getRange(row, 27).setValue(new Date());
    SpreadsheetApp.flush();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("COMPLETED ORDERS");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    //the following line is not necessary since you moved rather than copied that range
    s.deleteRow(row);
  }
}
0 голосов
/ 06 мая 2020

Как насчет того, чтобы сделать эту функцию не onEdit, а штатной. А затем вызовите эту функцию в своем сценарии onEdit, который вставляет дату. Таким образом, он завершает установку даты, а затем запускает сценарий для перемещения строки данных. Вы даже можете поместить Utilities.sleep (1000) (1000 микросекунд - одна секунда), чтобы задержать скрипт, перемещающий строку.

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