onOpen на конкретном листе в AppScript

Aug 31 2020

У меня есть onOpenкод выполнения, но я хочу, чтобы он выполнялся только при открытии определенного листа (например, при открытии Sheet1должна запускаться функция onOpen.) Кто-нибудь знает, как этого добиться?

Вот чего именно я хочу добиться:

  1. При открытии электронной таблицы проверьте, является ли активным лист 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», а не только при открытии электронной таблицы или изменении любой ячейки выбора.

Ответы

2 Marios Aug 31 2020 at 17:49

Пояснение:

Чтобы выполнить блок кода внутри 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)