Как заставить Google Sheets автоматически обновлять мои макросы после добавления строки? - PullRequest
0 голосов
/ 19 февраля 2020

Проблема : После добавления строки в моем Листе Google мои существующие макросы перестают работать, поскольку ячейки, на которые они ссылаются, теперь смещены на одну строку.

Вопрос : Есть ли способ заставить Google Sheets автоматически обновлять мои макросы так же, как он обновляет все функции в листе?

1 Ответ

1 голос
/ 19 февраля 2020

Использование PropertiesService и onChange триггера

  • PropertiesService позволяет хранить переменную (например, интересующую строку) между запусками сценария
  • устанавливаемый триггер onChange срабатывает автоматически, когда происходит изменение (например, вставка строки)
  • Вы можете настроить последний для изменения интересующей строки, если другая строка была вставлено выше

Пример:

var sheetToWatch = "Sheet1";

function setUp(){  
  PropertiesService.getScriptProperties().setProperty("row", 4);
}

function onChange(e) {
  var row = parseInt(PropertiesService.getScriptProperties().getProperty("row"));
  var sheet = SpreadsheetApp.getActive().getActiveSheet();
  Logger.log(e.changeType);
  Logger.log(sheet.getName());
  Logger.log(sheetToWatch);
  Logger.log(sheet.getActiveRange().getRow());
  if (e.changeType == "INSERT_ROW"  &&  sheet.getName() == sheetToWatch && sheet.getActiveRange().getRow()<=row){
    row++;
  }
}


function withRow(){
  var row = parseInt(PropertiesService.getScriptProperties().getProperty("row"));
  // do something with my row
}

Инструкции:

  • Выполните один раз fucntion setUp(), чтобы установить начальную строку
  • Если строки над этой строкой будут вставлены, onChange() автоматически изменит переменную row (не забудьте привязать устанавливаемый триггер к onChange())
  • Запустите собственную функцию (здесь она вызывается withRow()) и получить фактический row из ScripProperties
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...