@Snowyyy

Как запустить onEdit из редактора или программным способом?

Я правильно понял, что нижеприведенный код будет запускать триггер при изменении конкретной ячейки, а не любой? При запуске выдает ошибку "TypeError: Cannot read property 'range' of undefined (строка 3, файл se)".
Вот код:
function onEdit(e) {
  // Get cell edited.  If it B6, then do something
  var cellAddress = e.range.getA1Notation();
  if (cellAddress === 'B26') {
    //To Do.  Code here if cell edited was B26
    Logger.log('the check worked!');
  };
}
  • Вопрос задан
  • 3652 просмотра
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Насколько я понимаю, вы пробуете вызвать функцию onEdit из другой функции или из редактора.

Разбор ошибки

Ошибка
TypeError: Cannot read property 'range' of undefined (строка 3, файл se)

Означает, что в некотором файле se в 3й строке есть некоторая переменная со значением undefined, свойство range которой прочитать невозможно. Тут все очевидно - у undefined нет свойств.

Если посмотреть на код, то становится ясно, что имя этой переменной e. И мы ее получаем в системную функцию onEdit. Это означает, что система сама передает контекст в эту функцию.

ОК. Значит, чтобы протестировать эту функцию, нужно передать параметр самостоятельно.

Например,

/**
 * Тестирование триггера для события EDIT
 */
function runOnEdit() {
  var source = SpreadsheetApp.getActive();
  var range = source.getRangeByName('Sheet!!B26');
  /**
   * @type {GoogleAppsScript.Events.SheetsOnEdit}
   */
  var e = {
    authMode: ScriptApp.AuthMode.LIMITED,
    oldValue: undefined, // ну или что хотите
    range: range,
    value: range.getValue(),
    source: source,
    triggerUid: 0,
    user: Session.getActiveUser(),
  };

  onEdit(e);
}

/**
 *
 * @param {GoogleAppsScript.Events.SheetsOnEdit} e
 */
function onEdit(e) {
  // Работает простой триггер
}


Проверьте - этот код будет работать точно так же, как если бы пользователь внес изменения в Таблице.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы