#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();