【发布时间】:2017-01-23 22:44:22
【问题描述】:
我在这个项目上发布了很多次,非常感谢我收到的帮助:)
有些事情让我无法理解:我有一个 Google 表格,其中包含 5 个单独的表格、一个主表格和 4 个单独的表格。我为它编写了一个“发送电子邮件”功能,它按预期工作,并在 4 个单独工作表中的每个工作表中的某个框包含“是”时触发。
我的问题围绕着将此脚本绑定到触发器。我收到了以前的建议,即创建一个自定义菜单,在选择时触发脚本。我能够添加菜单,将其绑定到一个简单的 onOpen() 触发器,并让它出现在工作表中,但它不会运行我的脚本:
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Send Emails')
.addSubMenu(ui.createMenu('Send Emails For:')
.addItem('Miranda Sheet', 'menuItem1')
.addItem('Piper Sheet', 'menuItem2')
.addItem('Lowes Sheet', 'menuItem3')
.addItem('Golden Sheet', 'menuItem4'))
.addToUi();
}
//actions for menu items are below...
脚本的目的是发送电子邮件,所以我现在知道我要将菜单与可安装的 onOpen() 触发器联系起来。那是我似乎无法确定的部分。如果我更改函数名称并通过资源>所有触发器将 onOpen() 绑定到该函数,我的菜单就会消失:
function addMenu() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Send Emails')
.addSubMenu(ui.createMenu('Send Emails For:')
.addItem('Miranda Sheet', 'menuItem1')
.addItem('Piper Sheet', 'menuItem2')
.addItem('Lowes Sheet', 'menuItem3')
.addItem('Golden Sheet', 'menuItem4'))
.addToUi();
}
function menuItem1() {
var ui = SpreadsheetApp.getUi();
//Prompt user for confirmation to send emails
var responseMir = ui.alert('Are you sure you want to send emails?', ui.ButtonSet.YES_NO);
// Process the user's response.
if (responseMir === ui.Button.YES) {
//Test alert
//ui.alert('You clicked the first menu item!');
}
}
所以,我的问题有两个:
我的菜单呢?
在函数绑定到触发器后,如何将菜单项绑定到我的脚本?似乎我应该能够在上面的 If 语句下说“在这里做事”。我错了吗?
感谢您的想法! (我保证会好起来的:)
【问题讨论】:
-
当最终用户选择 Miranda Sheet 时,函数
menuItem1()中的任何代码都会运行。基本上菜单项启动该功能,因此您在第 2 项上是正确的。您将调用一个函数来发送电子邮件,传递特定于 tje Miranda Sheet 的项目。 -
我建议保留通过 onOpen() 在简单触发器中定义的菜单。查看Installable Triggers的限制
-
好的,所以我需要让每个菜单项函数从单个工作表中收集所需的信息,然后调用定义的 sendEmails() 函数,将数据传递给它,然后发送关闭电子邮件?我不是必须将该函数绑定到可安装的 onEdit() 吗?
-
没有。 onEdit 不相关。请参阅模板的官方“创建菜单”帮助部分。
-
另一件事。你有一个名为 onOpen() 的函数以及定义的触发器吗?如果是这样,那可能会导致问题。
标签: javascript function google-apps-script google-sheets