onOpen на конкретном листе в AppScript
У меня есть onOpenкод выполнения, но я хочу, чтобы он выполнялся только при открытии определенного листа (например, при открытии Sheet1должна запускаться функция onOpen.) Кто-нибудь знает, как этого добиться?
Вот чего именно я хочу добиться:
- При открытии электронной таблицы проверьте, является ли активным лист Sheet1. В случае, если затем выполняется условие на этом листе, как показано ниже:
onOpen() { //If the active sheet is "Sheet1" then perform this: //Sheet Execution comes here. }
Но вот проблема с приведенным выше утверждением:
onOpen будет проверять только после открытия листа. Я хочу проверять это каждый раз, когда активным листом является «Sheet1». Так, например, первоначально пользователь открывает электронную таблицу, он попадает на «Sheet1». Теперь условие проверяется и вывод отображается, но что, если пользователь изменит вкладку, чтобы сказать «Sheet2», а затем вернется к «Sheet1». В этом случае onOpen()не выполняется. Я хочу выполнять свою проверку каждый раз, когда пользователь приземляется или переключается на «Sheet1».
А теперь еще один сценарий:
используя onSelectionChange:
onSelectionCHange() { //If the active sheet is "Sheet1" then perform this: //Sheet Execution comes here. }
Теперь это будет работать каждый раз, когда пользователь переключается на «Sheet1», но вот проблема, даже если пользователь переключается на другие ячейки в «Sheet1» onSelectionChange, что снова является нежелательным. Все, что я хочу, - это запускать функцию только при каждом изменении вкладки / листа на «Sheet1», а не только при открытии электронной таблицы или изменении любой ячейки выбора.
Ответы
Пояснение:
Чтобы выполнить блок кода внутри onOpenфункции только при открытии файла электронной таблицы из Sheet1, вы можете создать следующее условие if:
function onOpen(e) {
const as = e.source.getActiveSheet().getName();
if (as == 'Sheet1'){
//code you want to be executed when you open the spreadsheet from Sheet1
}
}
Недостаток:
OnOpen функция выполняется только при открытии в электронной таблице файла. Вы не можете просто переключаться между листами и ожидать, что onOpen сработает.
Решение:
Вместо этого для выполнения кода при переключении между разными листами вы можете использовать onSelectionChange(e). В следующем примере устанавливается значение ячейки A1 листа Sheet1 при переключении с другого листа на Sheet1 :
function onSelectionChange(e) {
const as = e.source.getActiveSheet();
if (as.getName() == 'Sheet1'){
as.getRange('A1').setValue("This is Sheet1");
}
}
А вот общий шаблон кода для выполнения кода при переключении на Sheet1 :
function onSelectionChange(e) {
const as = e.source.getActiveSheet();
if (as.getName() == 'Sheet1'){
// put your code here
}
}
Рекомендации:
- onOpen (e)
- onSelectionChange (e)