запуск сценария на неактивном листе - PullRequest
0 голосов
/ 14 ноября 2018

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

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

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

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

1 Ответ

0 голосов
/ 18 ноября 2018

Существует два аспекта перехода на синхронизированный триггер с 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 минут».


Trigger before


Trigger after


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