2017-01-20 2 views
1

Если я выберу несколько ячеек (например, A1: D5) и напечатаю некоторый текст для запуска onEdit (e), как я могу получить выбранный диапазон? Все эти функции (e.range, .getActiveRange, .getActiveSelection) возвращают только одну ячейку с новым текстом (A1)!onEdit trigger e.range только одна ячейка вместо целого выбора

function onEdit(e){ 
    Logger.log('A1 Notation: ' + e.range.getA1Notation()); 

    // Try workaround using getActiveSheet. Also fails within the onEdit function. 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var range = sheet.getActiveRange(); 
    var selection = sheet.getActiveSelection(); 

    Logger.log('getActiveRange A1 Notation: ' + range.getA1Notation()); 
    Logger.log('getActiveSelection A1 Notation: ' + selection.getA1Notation()); 
} 

Если я нажимаю клавишу «Удалить» вместо ввода текста, функции диапазона работают как ожидалось (A1: D5).

ответ

2

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

Если вы хотите проверить это, попробуйте растянуть диапазон. Вы заметите, что диапазон событий будет только для затронутых ячеек, а не для всей выделенной области.

P.S. - Если вы хотите выбрать регион и управлять содержимым, не пытаясь обработать его внутри события, вы должны создать пользовательскую функцию и отобразиться в пользовательском интерфейсе электронных таблиц. Нравится так:

function onOpen(){ 
var ui = SpreadsheetApp.getUi(); 
ui.createMenu('Top menu name') 
    .addItem('menu item description 1', 'functionName1') 
    .addItem('menu item description 2', 'functionName2') 
    .addToUi(); 
} 

functionName1(){ ...... } 

etc.... 
+0

Да, удаление диапазона (или вставки в диапазон) влияет на каждую ячейку диапазона, поэтому имеет смысл, что e.range захватывает весь диапазон. Как я могу получить выбранный диапазон электронной таблицы из функции onEdit (e), вызванной только одной из выбранных ячеек, редактируемых? Я автоматизирую таблицу расписания номеров. Я хочу иметь возможность создавать события календаря непосредственно из листа, выбирая диапазон, соответствующий столбцам строки и времени комнаты, а затем введите имя события. –

+0

Ограничения: поскольку простые триггеры запускаются автоматически, не запрашивая у пользователя разрешения, они могут быть подвергнуты нескольким ограничениям: они не могут получить доступ к службам, требующим авторизации. Например, простой триггер не может отправить электронное письмо, потому что для службы Gmail требуется авторизация, но простой триггер может переводить фразу с помощью службы языка, которая является анонимной. https://developers.google.com/apps-script/guides/triggers/. Пожалуйста, выйдите из механика событий. Попробуйте выбрать диапазон и использовать пользовательскую функцию для выполнения этой задачи. –

Смежные вопросы