我有一个模板电子表格,应该在打开时执行一些代码 此代码的一部分是打开一个模式对话框,要求用户在脚本运行时等待 我在模板上手动创建了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触发器,则会添加菜单,但模式对话框永远不会自动显示。但是,通过单击添加的菜单项显示它 将制作模板电子表格的副本,并且不能在每个副本上添加手动触发器。
答案 0 :(得分:0)
我有类似的问题。通过自定义菜单调用它会完美地工作;但是,我将它添加到函数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()添加到项目触发器列表中,它就会按预期工作。
答案 1 :(得分:-1)
非常感谢您的支持。 我发现使用_pleaseWait()的结构和Startup通知可以很好地工作。只需在启动中包含onOpen()即可。