Google Sheets два onEdits, второй onEdit конфликтует с первым - PullRequest
0 голосов
/ 12 марта 2019

Я работаю на листах Google, пытаясь настроить два сценария onEdit, один для работы сразу после другого. Я не совсем программист, но могу хотя бы немного прочитать кодирование и по большей части выяснить, что и где можно изменить, чтобы скрипты работали для моей электронной таблицы. Я просмотрел StackOverflow и справочный форум Google, но ничто не помогло мне с проблемой, с которой я столкнулся.

Вот что я пытаюсь сделать. Столбец 12 (L) - это столбец состояния с параметрами; Выполняется, Нет разрешения, решено.

Когда что-то переворачивается в Resolved, я бы хотел, чтобы оно переместилось в конец электронной таблицы, а затем эта нижняя строка была выделена.

Вот два сценария, с которыми я работаю, сами они делают то, что я хочу, но вместе запускается второй сценарий, который сначала выделяет строку, а затем перемещается вниз. Также по какой-то причине, когда второй скрипт активен, есть 50-50, что, когда запись перемещается вниз, перемещается вверх на одну строку.

Первый скрипт:

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

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

Второй скрипт:

function onEdit2(e) {
if (e) {
    var ss = e.source.getActiveSheet();
    var r = e.source.getActiveRange(); 
    if (r.getRow() != 1 && ss.getName() == "Problems") {

        status = ss.getRange(r.getRow(), 12).getValue();

        rowRange = ss.getRange(r.getRow(),1,1, 12);

        if (status == 'Resolved') {
            rowRange.setBackgroundColor("#99ccff");
        }
        }else if (status == '') { 
            rowRange.setFontColor("#000000");
        }   
    }
}

Я настроил onEdit2 на триггер, но это не сработало :(

Любая помощь приветствуется, и, пожалуйста, дайте мне знать, если потребуется дополнительная информация.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Попробуйте эту функцию. Он переместит строку Resolved вниз, затем выделит ее.

function onEdit(event) {
  var sheet = event.source.getActiveSheet();
  var range = event.source.getActiveRange();
  // move
  if (sheet.getName() == 'Problems' && range.getColumn() == 12 && range.getValue() == 'Resolved') {
    var row = range.getRow();
    var numColumns = sheet.getLastColumn();
    var tRange = sheet.getRange(sheet.getLastRow() + 1, 1, 1, numColumns);
    tRange.setValues(sheet.getRange(row, 1, 1, numColumns).getValues());
    tRange.setBackgroundColor('#99ccff');
    sheet.deleteRow(row);
  }
}
0 голосов
/ 12 марта 2019

Функция onEdit (e) является зарезервированной функцией Google AppScript, как и другие функции триггера (onOpen (), onChange, ...).Вызов его onEdit2 (e) не будет работать, поскольку он не распознается как функция триггера.

Просто измените имя на onEdit (), чтобы Google AppScript мог его инициировать.

Дайте мне знатьесли это работает для вас

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