Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 无法使用应用程序脚本在电子表格副本的onOpen功能中打开模式对话框_Google Apps Script_Google Sheets_Triggers - Fatal编程技术网

Google apps script 无法使用应用程序脚本在电子表格副本的onOpen功能中打开模式对话框

Google apps script 无法使用应用程序脚本在电子表格副本的onOpen功能中打开模式对话框,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,我有一个模板电子表格,应该在open上执行一些代码。 此代码的一部分是打开一个模式对话框,要求用户在脚本运行时等待。 我已经在模板上手动创建了onOpen触发器。 打开此模板电子表格时,一切正常 但是,当我复制电子表格并打开它时,onOpen代码会执行,但模式对话框永远不会显示。 手动安装在第一个电子表格上的触发器不会添加到副本中。如果我在副本上手动创建触发器,一切都会按预期工作 如何创建在打开时显示模式对话框的初始电子表格副本,而不必在每个副本上手动创建触发器(或手动执行任何其他操作? 编辑

我有一个模板电子表格,应该在open上执行一些代码。
此代码的一部分是打开一个模式对话框,要求用户在脚本运行时等待。
我已经在模板上手动创建了onOpen触发器。
打开此模板电子表格时,一切正常

但是,当我复制电子表格并打开它时,onOpen代码会执行,但模式对话框永远不会显示。
手动安装在第一个电子表格上的触发器不会添加到副本中。如果我在副本上手动创建触发器,一切都会按预期工作

如何创建在打开时显示模式对话框的初始电子表格副本,而不必在每个副本上手动创建触发器(或手动执行任何其他操作?


编辑1:下面是一个简单的示例

function onOpen(event) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Custom menu")
    .addItem('Show modal dialog', '_pleaseWait')
    .addToUi();

  _pleaseWait();
}

function _pleaseWait(){
  var htmlOutput = HtmlService
    .createHtmlOutput("Processing...")
    .setWidth(100)
    .setHeight(100);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Hello');
}
如果没有手动创建的onOpen触发器,则会添加菜单,但模式对话框不会自动显示。但是,可以通过单击添加的菜单项进行显示。

将制作模板电子表格的副本,并且不能在每个副本上添加手动触发器。

我也有类似问题。当通过自定义菜单调用时,它将完美工作;但是在我将它添加到函数onOpen(){}的那一刻,它就不起作用了,而且,它之后也不会执行任何操作。我甚至尝试将代码直接添加到onOpen函数中(而不是调用另一个函数)。这似乎是ui.showModalDialog()的一个明显问题;它将与ui.alert的预期一样工作。我最后添加了一个项目触发器来运行我的函数,它可以正常工作。以下代码不起作用:

function onOpen(){    
    SpreadsheetApp.getUi().createMenu('Feedback').addItem('Submit Feedback','sendFeedback').addToUi();
    startUpNotification()
}
function startUpNotification(){
    var ui = SpreadsheetApp.getUi();
    var message = HtmlService.createHtmlOutputFromFile('reminders').setWidth(800).setHeight(250);
    var result = ui.showModalDialog(message,' ');
}

但是,一旦我通过“脚本编辑器”窗口中的“编辑”菜单将startUpNotification()添加到项目触发器列表中,它就按预期工作了。

非常感谢您的支持。
我发现使用_plessewait()的结构和启动通知可以很好地工作。只要在启动时包含onOpen(),它就会工作。

我已经想到了这个解决方案,但我需要在第一次打开副本之前自动安装触发器以编程方式安装触发器。您必须安装一个触发器,以使授权范围能够执行您想要执行的其他操作。您的代码似乎有问题。然而,我们不能帮助,除非我们有。否则,我们只是盲目猜测。@ChrisW我添加了一个小例子。谢谢分享。我面临着一个类似的问题,这对我也很有效。