Вызов события при изменении активной электронной таблицы

Я работаю с электронной таблицей с несколькими листами, и я хотел бы, чтобы мое пользовательское меню панели инструментов менялось динамически в зависимости от того, какой лист открыт в данный момент.

Есть ли событие, которое можно вызвать при изменении активной электронной таблицы? Или какой-нибудь другой метод обновления меню при переходе между листами.


person T27M    schedule 25.08.2013    source источник


Ответы (1)


С помощью этого небольшого кода можно создать динамическое меню на основе активного листа.

Код

var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  ss.addMenu("Extra", 
    [{name: "Sheet A", functionName: "A"},
     {name: "Sheet B", functionName: "B"}, 
     {name: "Sheet C", functionName: "C"}
    ]);
}

function onEdit() {
  var activeSheet = ss.getActiveSheet().getName(), nMenu;
  ss.removeMenu("Extra");    

  switch (activeSheet) { 
    case "A":
      nMenu = [{name: "Sheet B", functionName: "B"}, 
        {name: "Sheet C", functionName: "C"}];
      break;
    case "B":
      nMenu = [{name: "Sheet A", functionName: "A"}, 
        {name: "Sheet C", functionName: "C"}];
      break;
    case "C":
      nMenu = [{name: "Sheet A", functionName: "A"},
        {name: "Sheet B", functionName: "B"}];
      break;
  }      
  ss.addMenu("Extra", nMenu);
}

Пример

Я создал для вас пример файла: Динамическое меню

Примечание

Меню изменяется только при редактировании любой из ячеек на активном листе.

person Jacob Jan Tuinstra    schedule 25.08.2013
comment
Спасибо, я смотрел на функцию onEdit, так что, если я правильно понимаю, нет другого способа сделать это без предварительного редактирования ячейки для вызова события? - person T27M; 27.08.2013
comment
@ T27M Невозможно иметь обработчик событий для selectTab. - person Jacob Jan Tuinstra; 01.09.2013