Настройка меню надстроек сценариев приложений для каждого редактора - PullRequest
2 голосов
/ 02 апреля 2020

У меня есть надстройка, ранее предназначавшаяся только для Документов Google, и я пытаюсь расширить набор функций, чтобы включить в нее Google Sheets. В режиме разработки я могу установить условие для определения, какой тип документа активен (документы или листы), а затем показать соответствующее меню. Когда я публикую sh последнюю версию надстройки, меню надстроек перестает работать как в документах, так и в листах.

Я предполагаю, что это связано с разрешениями вокруг "onOpen () "но я не уверен, как еще справиться с этим. G Suite Marketplace позволяет указать, что надстройка поддерживает несколько редакторов.

Вот код, который работает в разработке:

function onOpen(e) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var doc = DocumentApp.getActiveDocument();

  if(ss != null && ss != undefined) {
    var sheetsUI = SpreadsheetApp.getUi();
    sheetsUI.createAddonMenu()
      .addItem('Name', 'function')
      .addToUi();
  }

  if(doc != null && doc != undefined) {
    var docsUI = DocumentApp.getUi();

    docsUI.createAddonMenu()
    .addItem('Name', 'function')
    .addToUi();
  }  
}

Если я удаляю условный материал и включаю только меню редактора c (документы для документов, листы для листов), меню отображаются правильно.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Вы не хотели бы, чтобы пользователю требовалось утвердить доступ к своим листам, если это дополнение к Документам и наоборот. И если надстройка не имеет разрешения для одного из них, тогда ваш код выдаст ошибку, поэтому вам нужно перехватить ошибку с помощью try/catch

function onOpen(e) {
  var docUI,thisIsA_Sheet;

  try{
    docUI = SpreadsheetApp.getUi();
    thisIsA_Sheet = true;
  }catch(e){
    //Do nothing
  }

  if (!thisIsA_Sheet) {//This is not a Google Sheet
    try{
      docUI = DocumentApp.getUi();
    }catch(e){
      //Do nothing
    }
  }

  docUI.createAddonMenu()
    .addItem('Name', 'function')
    .addToUi();

}
1 голос
/ 03 апреля 2020

Комментарий об ошибках перехвата привел меня к решению. Я поместил код меню каждого редактора в блоки try / catch, и теперь он работает.

function onOpen(e) {

  try{
    var docsUI = SpreadsheetApp.getUi();
    docsUI.createAddonMenu()
    .addItem('Sheets menu item name', 'function')
    .addToUi();
  } catch(e) {
  }

  try{
    var docsUI = DocumentApp.getUi();
    docsUI.createAddonMenu()
    .addItem('Docs menu item name', 'function')
    .addToUi();
  } catch(e) {
  } 

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