Настройка триггера для запуска при редактировании определенной ячейки

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

Я пытаюсь перенести данные из одного листа Google в другой лист Google на основе того, когда кто-то выбирает свое имя в раскрывающемся списке, прикрепленном к этой ячейке. Функция выбирает данные, которые я хотел бы перенести с исходного листа на лист назначения. Когда я запускаю функцию в скрипте приложений, она работает правильно, но когда я попытался добавить триггер onEdit, он выбрал бы диапазон ячеек, а не только одну конкретную ячейку для запуска. Также у меня будет несколько ячеек, к которым будет прикреплен выпадающий список, и при редактировании к этой конкретной ячейке должен быть прикреплен триггер.

Любая помощь или совет будут высоко оценены.

Спасибо!

Это то, что я придумал до сих пор.

 function Submit_C4() {
 var sss = SpreadsheetApp.openById('1Fx4IQtx41Ck1yxjcDPzSGFgf9XAemX6MCjXD67S1qoI'); //SOURCE SHEET ID
 var ss = sss.getSheetByName('sheet1'); //SOURCE SHEET NAME
 var range1 = ss.getRange(4,3,1); //PACKER NAME
 var range2 = ss.getRange(2,2,1); //CUSTOMER NAME
 var range3 = ss.getRange(4,2,1); //CASE
 var data1 = range1.getValues(); //PACKER NAME VALUE
 var data2 = range2.getValues(); //CUSTOMER NAME VALUE
 var data3 = range3.getValues(); //CASE VALUE
 var tss = SpreadsheetApp.openById('1ePKc9q43jiGqMjygK71f8imIGOOlnr2_1jx1Q1Yiwf8'); //DESTINATION SHEET ID
 var ts = tss.getSheetByName('sheet2'); //DESTINATION SHEET NAME
 ts.getRange(ts.getLastRow() 1,1,1,1).setValue(new Date()); //ADDS TODAY'S DATE
 ts.getRange(ts.getLastRow(), 2,1,1).setValues(data2);
 ts.getRange(ts.getLastRow(), 3,1,1).setValues(data1);
 ts.getRange(ts.getLastRow(), 4,1,1).setValue(1);
 ts.getRange(ts.getLastRow(), 5,1,1).setValues(data3); 
}  

Ответ №1:

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

  • Триггер скрипта приложений содержит объекты событий
  • onEdit Триггер возвращает вам объект события range , который позволяет вам получить, какой диапазон редактируется.
  • Чтобы получить доступ к объекту события, вам необходимо передать объект события в качестве параметра функции, чтобы вы могли получить подразделы в вашей функции

Пример:

 // provided your function is bound to an installable onEdit trigger, you can leave the name as it is, 
//but pass an event parameter to it
function Submit_C4(event) {
 var cellNotation = event.range.getA1Notation();
 var cellOfInterest = "A1";
 if (cellNotation == cellOfInterest){
  //do what you want
  }
  else{
  // do someting different or nothing
  }
}
  

Ответ №2:

Прямо из документации Google apps script, вот ссылка на простые триггеры, которые вы должны настроить следующим образом

 function onEdit() {
 var sss = SpreadsheetApp.openById('1Fx4IQtx41Ck1yxjcDPzSGFgf9XAemX6MCjXD67S1qoI'); //SOURCE SHEET ID
 var ss = sss.getSheetByName('sheet1'); //SOURCE SHEET NAME
 var range1 = ss.getRange(4,3,1); //PACKER NAME
 var range2 = ss.getRange(2,2,1); //CUSTOMER NAME
 var range3 = ss.getRange(4,2,1); //CASE
 var data1 = range1.getValues(); //PACKER NAME VALUE
 var data2 = range2.getValues(); //CUSTOMER NAME VALUE
 var data3 = range3.getValues(); //CASE VALUE
 var tss = SpreadsheetApp.openById('1ePKc9q43jiGqMjygK71f8imIGOOlnr2_1jx1Q1Yiwf8'); //DESTINATION SHEET ID
 var ts = tss.getSheetByName('sheet2'); //DESTINATION SHEET NAME
 ts.getRange(ts.getLastRow() 1,1,1,1).setValue(new Date()); //ADDS TODAY'S DATE
 ts.getRange(ts.getLastRow(), 2,1,1).setValues(data2);
 ts.getRange(ts.getLastRow(), 3,1,1).setValues(data1);
 ts.getRange(ts.getLastRow(), 4,1,1).setValue(1);
 ts.getRange(ts.getLastRow(), 5,1,1).setValues(data3); 
}
  

пожалуйста, обратите внимание, что для изменения функции onEdit() вам также потребуется некоторая форма range для выбора нескольких ячеек

для диапазона я использовал две ссылки, 1 и 2, вот что я придумал:

 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cell =  sheet.getCurrentCell();