Как я могу запустить HtmlService непосредственно при запуске файла (onOpen)? - PullRequest
0 голосов
/ 14 июня 2019

Я создал этот простой скрипт в Google Sheet:

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu("My Private Menue")
      .addItem('My html Dialog', 'StartMessage')
      .addToUi();      
    ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").activate();

  var html = HtmlService.createHtmlOutputFromFile('Message');
  SpreadsheetApp.getUi().showModalDialog(html, 'TITELLEISTE');
}

Но HtmlService не запускается напрямую. Но когда я нажимаю на свое созданное меню, HtmlService выполняется без проблем.

Где моя вина? Здесь у меня есть осколок моего файла .

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Из того, что я понимаю, служба HTML может отображать диалоговое окно или боковую панель в Google Sheets или Forms, если ваш скрипт связан с контейнером для файла.Это означает, что если он был создан из этого документа, а не как отдельный скрипт.Я вижу, что у вас уже есть методы Bound-Scripts в вашем коде, такие как getActiveSpreadsheet().

Почему бы не использовать следующее:

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu("My Private Menu")
      .addItem('My html Dialog', 'StartMessage')
      .addToUi();

//Return sheet object by name
function getSheet(name){
 return SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);
}  

function StartMessage(){  
  var html = HtmlService.createHtmlOutputFromFile('Message').setWidth(400).setHeight(300);  
  SpreadsheetApp.getSheet().getUi().showModalDialog(html, 'TITELLEISTE');
}

Надеюсь, это поможет!

Ссылки:
https://developers.google.com/apps-script/guides/html/
https://developers.google.com/apps-script/guides/dialogs
https://ctrlq.org/code/19954-html-service-google-scripts

0 голосов
/ 14 июня 2019

В вашем скрипте нет ничего плохого, но есть проблема.Если вы откроете свой протокол выполнения , вы увидите, что триггер onOpen(e) не работает из-за «У вас нет разрешения на вызов showModalDialog» .Кроме того, обратите внимание на дополнительные ограничения , которые необходимо учитывать.

Ваш триггер запускается с authMode=LIMITED (вы увидите, что если вы log() объект события триггера).В соответствии с таблицей ограничений, Доступ к пользовательскому интерфейсу ограничен Добавление пунктов меню , что приводит к ошибке (таблица находится в дополнениях редактора Руководство по жизненному циклу аутентификации ,но с точки зрения ограничений authMode=LIMITED я считаю, что это единственное упоминание о том, что простые триггеры ограничены добавлением пунктов меню).

Это также означает, что если вы хотите показывать пользователям диалог каждый раз, когда они открывают вашу электронную таблицувам не повезло с точки зрения простых триггеров (см. комментарий TheWizEd, предлагающий использовать устанавливаемые триггеры для решения), так как триггеры запускаются, не запускаются authMode=LIMITED, когда пользователь нажимает на элемент меню (и поэтому вымогут отображать диалоговое окно после щелчка).

UPD: ответ был обновлен после обсуждения с TheMaster, чтобы избежать путаницы.

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