Google Sheet Скопируйте строку в Новый лист, если формула запускает триггер - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь использовать довольно стандартную строку копирования с одного листа на другой код листа, когда в столбце B отображается «Пуск», но в столбце B содержится следующая формула:

= IF(A2 = «Завершено», «Начать», «Еще нет»)

, и этот код, похоже, не распознает формулу, изменяющуюся с «Еще нет» на «Начало».Любая помощь будет принята с благодарностью.Спасибо!

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Temp" && r.getColumn() == 1 && r.getValue() == "Complete") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Start");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

1 Ответ

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

Проблема не в том, что он не "распознает" значение, изменяющее формулу.Если вы посмотрите на свою формулу снова после ее копирования, вы должны заметить, что ссылка меняется с A2 на Temp!A2.

moveTo работает так, как если бы вы по отдельности вырезали n- вставьте каждую ячейку в новую операцию.Это приводит к этому «поддержанию» ссылки на их исходные ячейки.

Если это нежелательно, возможно, вам следует переключиться на copyTo.У которых могут быть другие побочные эффекты в ваших формулах.Но он должен хорошо работать на этом простом примере.

s.getRange(row, 1, 1, numColumns).copyTo(target); //try copyTo here
...