如何在文件启动(onOpen)上直接启动HtmlService?

时间:2019-06-14 20:07:58

标签: google-apps-script google-sheets triggers

我已经在Google表格中创建了这个简单的脚本:

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的执行就没有问题。

我的错在哪里? Here I have shard my file

2 个答案:

答案 0 :(得分:0)

您的脚本没有错,但是有问题。如果打开您的执行记录,您会看到onOpen(e)触发器由于“您无权调用showModalDialog” 错误而失败。另外,请注意您需要考虑的additional restrictions

您的触发器以authMode=LIMITED运行(如果您log()触发器的事件对象,您会看到)。根据限制表,对用户界面的访问仅限于添加菜单项,因此会失败(该表位于编辑器附件auth lifecycle guide中,但在authMode=LIMITED限制的用语,我相信这是唯一提及仅限于添加菜单项的简单触发器。

这也意味着,如果您希望在用户每次打开电子表格时向他们显示一个对话框,那么就简单的触发器(请参阅TheWizEd的注释,建议使用可安装的触发器作为解决方案)而言,您会感到不走运用户单击菜单项时不要运行authMode=LIMITED(这就是为什么单击后可以显示对话框的原因。)

UPD:答案是在与TheMaster讨论后更新的,以避免造成混淆。

答案 1 :(得分:0)

据我了解,如果您的脚本是容器绑定的,HTML服务可以在Google表格或窗体中显示对话框或侧边栏。这意味着如果它是从该文档而不是作为独立脚本创建的。我可以看到您的代码中已经有绑定脚本方法,例如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