Аддонное меню для Google Docs, Google Sheets или Google Slides в рамках одного скрипта? - PullRequest
0 голосов
/ 09 января 2020

Желаемая ситуация

Имейте функцию чистой оболочки, чтобы определить текущее используемое приложение GSuite (Документы, листы или слайды в моем случае) и соответственно настроить пользовательский интерфейс.

Начальная настройка кода

Обратите внимание, что я использую Babel для преобразования кода в код, совместимый с ECMAscript2015 / AppScript JS. Мой вопрос касается только общей логики c того, с чем проверять.

export function onInstall(e) {
  onOpen(e);
}

function onOpen(e) {
  let ui = '';
  typeof SpreadsheetApp === 'undefined' ? (ui = DocumentApp.getUi()) : (ui = SpreadsheetApp.getUi());

  ui.createMenu('My Addon')
    .addItem('Open SideBar', 'showMySidebar')
    .addToUi();
}

function showMySidebar() {
  const ui = HtmlService.createHtmlOutputFromFile('sidebar').setTitle('My Sidebar');
  let env = '';
  typeof SpreadsheetApp === 'undefined' ? (env = DocumentApp.getUi()) : (env = SpreadsheetApp.getUi());
  env.showSidebar(ui);
}

Результат

Это работает только в Google Sheets. При попытке запустить скрипт как дополнение в Google Docs появляется сообщение «Невозможно выполнить SpreadsheetApp.getui () из этого контекста».

Текущая настройка кода

export function onInstall(e) {
  onOpen(e);
}

function onOpen(e) {
  let ui = '';
  try {
    ui = SpreadsheetApp.getUi();
  } catch (e) {
    ui = DocumentApp.getUi();
  }

  ui.createMenu('My Addon')
    .addItem('Open SideBar', 'showMySidebar')
    .addToUi();
}

function showMySidebar() {
  const ui = HtmlService.createHtmlOutputFromFile('sidebar').setTitle('My Sidebar');
  let env = '';
  try {
    env = SpreadsheetApp.getUi();
  } catch (e) {
    env = DocumentApp.getUi();
  }
  env.showSidebar(ui);
}

Результат

Это работает как в Google Docs, так и в Google Sheets, но не в Google Slides

Challenge

Как динамически проверять среду в скрипте приложений?

Любые мысли и идеи будут с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...