@Dofre

Google Sheets Как ограничить триггер onEdit?

Никогда раньше не занимался написанием скриптов, по примеру с горем пополам соорудил этот. Пытаюсь сделать так, чтоб при добавлении информации в последнюю строку таблицы в столбец F, срабатывал триггер и заполнял столбцы B,E,H (копировал инфу со строчки над этой). Но сам триггер более щедрый и срабатывает при изменениях в любом месте листа (если вставить инфу не впритык к таблице, а, к примеру, через 5 строк, то вся информация во всех трех столбцах просто исчезает)- это проблема номер 1. Проблема номер два, заключается в том, что сам скрипт работает сразу со всем столбцом, а не конкретной строчкой у себя над головой (вижу как весь столбец исчезает и заново загружается, вместо того, чтоб взять инфу с ячейки сверху).
function onEdit(e) {
var activeSheet = e.source.getActiveSheet();
  var cell = activeSheet.getRange(activeSheet.getLastRow()-1, 2);
  var destination = activeSheet.getRange(2, 2, activeSheet.getLastRow()-1, 1);
cell.copyTo(destination);
  
var cell1 = activeSheet.getRange(activeSheet.getLastRow()-1, 5);
  var destination1 = activeSheet.getRange(2, 5, activeSheet.getLastRow()-1, 1);
cell1.copyTo(destination1);

var cell2 = activeSheet.getRange(activeSheet.getLastRow()-1, 8);
  var destination2 = activeSheet.getRange(2, 8, activeSheet.getLastRow()-1, 1);
cell2.copyTo(destination2);

}
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
В параметре e много полезного. Как раз по нему можно ограничить действие скрипта на какие-то листы или отдельные ячейки или по более сложным условиям.
function onEdit(event) {
	//Возникает при изменении ячейки
	var ss = event.source.getActiveSheet();//Текущий лист
  	var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
	var row = event.range.getRow();							//Номер строки
	var col = event.range.getColumn();						//Номер столбца
	var newValue = event.value;								//Новое значение
	var oldValue = event.oldValue;							//Старое значение
	
  if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return;	//Указываем на каких листах должен работать скрипт
	
	//Что-то делаем...
  };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы