После некоторого тестирования я смог заставить его работать.Как сказал Рубен, onOpen onEdit не может быть внутри любой другой функции.Они уже определяют действие, поэтому, когда действие onOpen или onEdit будет запускать сценарий автоматически при открытии или редактировании электронной таблицы.
Вы можете проверить дополнительную информацию о триггерах сценариев приложений https://developers.google.com/apps-script/guides/triggers, но вВ данном конкретном случае onEdit будет запускаться каждый раз, когда обновляется любая ячейка, если только вы не укажете ячейку, для которой хотите запустить сценарий, используя Объекты событий для получения дополнительной информации. https://developers.google.com/apps-script/guides/triggers/events.
Для этого конкретного сценария, поскольку вы хотите, чтобы сценарийзапустить при обновлении ячейки, вы должны проверить, обновляется ли эта ячейка с помощью e.range.getA1Notation (), getA1Notation () возвращает диапазон в нотации A1 для получения дополнительной информации. https://developers.google.com/apps-script/reference/spreadsheet/range#getA1Notation(). Есть пример, которыйпоможет вам понять следующий сценарий:
function onOpen(e){
var app = SpreadsheetApp.getActiveSpreadsheet();
var sheet = app.getActiveSheet();
sheet.getRange("A2:A2").clearContent();
sheet.getRange("A10:A10").setValue("Select");
sheet.getRange("A15:A15").setValue("Select");
sheet.getRange("A20:A20").setValue("Select");
}
function onEdit(e){
var app = SpreadsheetApp.getActiveSpreadsheet();
var sheet = app.getActiveSheet();
var A2 = sheet.getRange("A2:A2");
console.log(e.range.getA1Notation());
if (e.range.getA1Notation() === "A2"){
console.log("A2 Updated");
sheet.getRange("A10:A10").setValue('Select');
sheet.getRange("A15:A15").setValue('Select');
sheet.getRange("A20:A20").setValue('Select');
}
}
функция onOpen будет запускаться каждый раз при открытии электронной таблицы, а функция onEdit будет выполняться каждый раз, когда ячейка "A2" меняет свое значение.По сути, вы проверяете, равен ли диапазон с нотацией A1 «A2», тогда он будет запускать код в операторе if, в противном случае функция будет выполнена, но не будет выполнять никаких действий, поскольку ячейка A2 по-прежнему без изменений.Делая это, я не уверен, что есть ли предел выполнения такого рода, но это то, что вы можете исследовать дальше, я не думаю, что это повлияет, так как это должно выполняться на стороне клиента, а не на стороне сервера.
Надеюсь, это поможет, привет.