Существует два аспекта перехода на синхронизированный триггер с onEdit.
Первый касается изменений в коде, второй - это детали триггера.
Код
Код нельзя использовать повторно, потому что синхронизированный триггер не предоставляет те же подробности события, что и OnEdit.
Кроме того, возможно, что несколько строк могут быть помечены как «Завершенные» между каждым событием триггера, и код должен ответить на них все. наконец, каждую «готовую» строку нельзя удалить, поскольку она найдена, поскольку это влияет на номер строки всех оставшихся строк в столбце.
Следующий код сделает эту работу:
Большая часть этого будет знакома спрашивающему. Главное, кроме как вести учет каждого номера строки, который перемещен в «Завершено». Это делается путем помещения номера строки в массив. Затем, после того как все данные проверены и перемещены, существует небольшой цикл, который берет номера строк, записанные в массиве, и удаляет соответствующую строку. Цикл работает от самого высокого номера строки до самого низкого; это так, что удаление строки не влияет на номер строки оставшихся строк, которые будут удалены.
function so_53305432() {
// set up the spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// identify source and target sheets
var sourceSheet = ss.getSheetByName("Sheet1");
var targetSheet = ss.getSheetByName("Finished");
// get some variables to use as ranges
var sourcelastRow = sourceSheet.getLastRow();
var numColumns = sourceSheet.getLastColumn();
var targetLastRow = targetSheet.getLastRow();
// get data from the Source sheet
var sourceData = sourceSheet.getRange(1, 1, sourcelastRow, numColumns).getValues();
// set up some variables
var finishedRows = [];
var i = 0;
var x = 0;
var temp = 0;
// loop through column 15 (O) checking for value = "Finished"
for (i = 0; i < sourcelastRow; i++) {
// If value = Finished
if (sourceData[i][14] == "Finished") {
// define the target range and move the source row
var targetLastRow = targetSheet.getLastRow();
var target = targetSheet.getRange(targetLastRow + 1, 1);
sourceSheet.getRange(+i + 1, 1, 1, numColumns).moveTo(target);
// keep track of the source row number.
finishedRows.push(i);
}
}
// set up variables for loop though the rows to be deleted
var finishedLength = finishedRows.length;
var startcount = finishedLength - 1
// loop throught the array to delete rows; start with the highest row# first
for (x = startcount; x > -1; x--) {
// get the row number for the script
temp = +finishedRows[x] + 1;
// delete the row
sourceSheet.deleteRow(temp);
}
}
Trigger
Триггер должен быть пересмотрен. Для этого:
1) Откройте редактор сценариев, выберите «Триггеры текущего проекта». OnEdit должен отображаться как существующий триггер с типом события OnEdit.
2) Измените «Выберите, какую функцию для запуска» на новую функцию,
3) Измените «Выбор источника события» из электронной таблицы на «Время зависит».
4) Выберите «Тип триггера на основе времени» = «Таймер минут».
5) Выберите «Select Minute Interval» = и выберите период времени и интервал.
6) Сохраните триггер, а затем закройте вкладку «Триггер»
Если «каждая минута» встречается слишком часто, то спрашивающий может попробовать «каждые 5 минут».