Как обновить раскрывающийся список боковой панели надстройки Google Sheet при переименовании листов? - PullRequest
0 голосов
/ 01 мая 2020

Я создаю надстройку Google Sheet, которая сравнивает 2 столбца в электронной таблице. Пользователь может выбрать листы, в которых находятся 2 столбца, из раскрывающегося списка на боковой панели. При открытии затем боковой панели раскрывающийся список заполняется с помощью следующего кода на боковой панели html:

  <select id="sheet1">
    <? var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets(); ?>
    <? for(var i=0;i<sheets.length;i++) { ?>
    <option><?= sheets[i].getName()?></option>
    <? } ?>  
    };
  </select>

Однако, если пользователь переименовывает какой-либо из листов Google, когда боковая панель открыта, список не обновляться. Я не уверен, как будет лучшим способом обновить выпадающий список. Я открыт для идеи поставить кнопку «Обновить имена листов» рядом с выпадающим списком, если это будет лучше, чем необходимость следить за каждым изменением электронной таблицы, чтобы оно происходило динамически. Я перепробовал много возможных решений сегодня без успеха! Все предложения с благодарностью получены.

1 Ответ

0 голосов
/ 06 мая 2020

Ответ:

Нет прямого способа сделать это, хотя с помощью триггера onChange() вы можете перезагрузить боковую панель.

Дополнительная информация:

Согласно документации:

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

Когда лист переименовывается, событие onChange() запускается с changeType из OTHER в объекте события. Когда это обнаруживается onChange(), вы можете настроить боковую панель на перезагрузку.

Код:

function onChange(e) {
  if (e.changeType == "OTHER") {
    showSidebar();
  }  
}

function showSidebar() {
  var html = HtmlService.createTemplateFromFile('Page').evaluate()
      .setTitle('Sidebar title')
      .setWidth(300);
  SpreadsheetApp.getUi().showSidebar(html);
}

Настройка устанавливаемого триггера:

После редактирования> Текущий пункт меню триггеров проекта, у вас будет новая страница, открытая в G Suite Developer Hub. Нажмите кнопку + Add Trigger в правом нижнем углу и настройте параметры запуска следующим образом:

  • Выберите, какую функцию запустить: onChange
  • Выберите, какое развертывание должно выполняться: Head
  • Выберите источник события: From spreadsheet
  • Выберите тип события: On change

и нажмите Сохранить.

NB: Любые изменения в структуре электронной таблицы, , за исключением изменений в следующем списке , также приведут к перезагрузке боковой панели:

  • EDIT: содержимое диапазона изменено
  • INSERT_ROW - строка вставлена ​​в лист
  • INSERT_COLUMN - столбец вставлен в лист
  • REMOVE_ROW - строка удаляется с листа (не совпадает с очищенной)
  • REMOVE_COLUMN - столбец удаляется с листа
  • INSERT_GRID - новый лист добавляется в электронную таблицу
  • REMOVE_GRID - новый лист удаляется из электронной таблицы
  • FORMAT - форматирование диапазона редактируется (форматирование отображения , цвет фона, шрифт и т. д. c)

Я надеюсь, что это полезно для вас!

Рекомендации:

...