Есть ли способ определить тип редактирования, используемый с onEdit в скрипте Google Sheets? - PullRequest
1 голос
/ 30 мая 2019

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

Ответы [ 3 ]

1 голос
/ 30 мая 2019

Вы можете использовать установленный слушатель события изменения для Sheets.

https://developers.google.com/apps-script/guides/triggers/events#change

С помощью можно определить, была ли удалена строка, путем проверки типа изменения REMOVE_ROW.

Также можно определить, были ли отредактированы одна ячейка или несколько ячеек. См. Код ниже.

При вставке не будут вставлены строки или столбцы, поэтому, если произошел тип изменения «ПРАВКА», можно предположить, что строки или столбцы не были вставлены. Я не знаю ни одного способа ручного редактирования нескольких ячеек одновременно, поэтому, если активный диапазон включает несколько ячеек, это, вероятно, была «вставка».

function nameOfFunction(e) {
  var A1Notation,typeOfChange;

  //Install this function as a trigger for Sheets change

  typeOfChange = e.changeType;//Get the type of change that was made
  Logger.log('typeOfChange: ' + typeOfChange)
  Logger.log('typeof typeOfChange: ' + typeof typeOfChange)

  switch(typeOfChange) {
    case 'REMOVE_ROW':
      Logger.log('A row was deleted')
      break;
    case 'EDIT':
      A1Notation = SpreadsheetApp.getActiveRange().getA1Notation();
      Logger.log('A1Notation: ' + A1Notation)
      if (A1Notation.indexOf(":") === -1) {//There is NOT a colon in the A1 notation
        Logger.log('An Edit was made to a single cell')
      } else {
        Logger.log('An Edit was made to MULTIPLE cells')
      }
      break;
    case 'OTHER':
      /*  This is NOT an edit of types
        EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, FORMAT
      */
      Logger.log('This is NOT an edit or a row Deletion')
      break;
    default:

  }

}
1 голос
/ 30 мая 2019

В настоящее время это невозможно при использовании onEdit().Максимум, что вы можете найти из Редактировать объект события , это старые / новые значения ячейки. Примечание: это работает, только если редактируется только одна ячейка.

Вы можете, например, использовать e.range, чтобы определить диапазон, который был отредактирован, но он не сообщит вамтип редактирования, который имел место.

0 голосов
/ 30 мая 2019

Что в триггере событий?

Если вы хотите узнать, что содержит объект события, вы можете сделать что-то вроде этого:

function onEdit(e) {
  Logger.log(JSON.stringify(e));
}

В случае простого триггера onEdit () это то, что он содержит:

[19-05-30 10:19:36:809 MDT] {"authMode":{},"range":{"columnStart":4,"rowStart":4,"rowEnd":4,"columnEnd":4},"source":{},"user":{"nickname":"Your Nickname","email":"Your Email"},"value":"NewValue"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...