Google Scripts функциональность "e.changeType == 'INSERT_ROW'" - чтение при вставке новой строки - PullRequest
1 голос
/ 23 января 2020

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

Как вы можете видеть из моего кода, я использую .changeType функция в операторе if.

Кажется, что оператор if работает и работает вплоть до оповещения пользовательского интерфейса, что также работает. Однако ни один из приведенных ниже кодов этого не делает.

Странная часть в том, что тот же код работает, если я выношу его за пределы функции if.

У меня много проблем с отладкой это потому, что инструмент отладки Google Scripts считает if(e.changeType=='INSERT_ROW') неправильной строкой кода, но я не думаю, что это действительно так, как он работает правильно на листе Google. Я думаю, что это как-то связано с функциональностью триггера при изменении.

Возможно, некорректна остальная часть моего кода, но я не могу понять, почему он работает, когда его нет в этом операторе if.

То, что я пытаюсь сделать, это получить строку, которую только что добавили, путем получения активного диапазона ячеек. Затем найдите диапазон ячеек от непосредственно ниже этой ячейки до последней заполненной ячейки во всем листе. Затем эти клетки должны двигаться с помощью функции .moveTo.

Кто-нибудь может объяснить, что здесь происходит не так? пока невозможно отладить!

Код ниже:

function moveUpRows(e)
{
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var ui = SpreadsheetApp.getUi();

  if(e.changeType=='INSERT_ROW')
  {
    ui.alert("new row added!");
    var range = sheet.getActiveRange();
    var belowActiveRange = range.offset(1, 0);
    var rangeMovingUp = sheet.getRange("L"+belowActiveRange.getRow()+":S"+sheet.getLastRow())
    rangeMovingUp.moveTo(rangeMovingUp.offset(-1, 0));
  }
}

1 Ответ

0 голосов
/ 23 января 2020

Если вы вставите новую строку - это приведет к неопределенному обозначению активного диапазона

Фактически, Logger.log(range.getA1Notation()); зарегистрирует #REF!

Вы можете обойти это ограничение, определив :

...
var range = sheet.getActiveRange();
var row = range.getLastRow();
var belowActiveRange = sheet.getRange(row+1, 1, 1, sheet.getLastColumn());
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...