如何引用默认的“提交”表单按钮以将“提交”触发器与另一个操作联系起来?谢谢你。
例如,使用 onsubmit,
Logger.log('do something');
如何引用默认的“提交”表单按钮以将“提交”触发器与另一个操作联系起来?谢谢你。
例如,使用 onsubmit,
Logger.log('do something');
我没有向电子表格添加脚本以接收来自表单的响应(如 Mogsdad 的回答),而是添加了一个由表单的提交按钮触发的脚本。
第 1 步:首先创建一个 Google 表单
第2步:然后从菜单中,单击工具->脚本编辑器
第 3 步:给你的函数起一个名字,比如onSubmit()
第 4 步:编写一些代码以发送这样的电子邮件,然后单击“运行”按钮进行测试
function onSubmit() {
MailApp.sendEmail("fred@email.com,alice@email.com",
"Subject",
"A new application has been submitted.\n\n" +
"Here is the link to all Applications:\n" +
"https://docs.google.com/spreadsheets/x/1-fdasjhFAKEfdaahfkhsa/",
{name:"From Name"});
}
第 5 步:在 Script Editor 的菜单中,单击Run,或单击工具栏上的Play按钮来测试您的代码(例如,确保您收到电子邮件)
第 6 步:在脚本编辑器的菜单中,单击资源-> 当前项目的触发器
第 7 步:选择设置事件 From form
On form submit
第 8 步:然后从表单编辑器的菜单中,单击工具->脚本管理器并确保您的脚本被选中
第9步:尝试表格。单击表单的提交按钮后,您应该会收到一封电子邮件。
一个没有。表单服务不允许对产品进行任何编程控制。对于这个一般主题,问题跟踪器上有一个未解决的问题。给它加星标以“投票”,并接收更新。
但是,您并没有迷路。在接收表单响应的电子表格中,您可以添加带有可安装触发器的脚本以触发“表单提交”。从那里,您可以对提交的数据做很多事情,包括根据需要记录...但对表单本身没有任何作用。
这些参考资料解释了触发器和事件。
这是一个古老的答案。
目前(2014 年 1 月)有两种 onSubmit 方式。一个是简单地创建一个函数 onSubmit() 据称(它对我不起作用......)仅在当前提交用户的许可下允许一组有限的操作。例如,您无法访问他提交的电子邮件,或修改下一次提交的基础表单。
然后是提交触发器,您可以添加并附加到任何函数,并在您自己的权限下做任何您想做的事情。看起来与上面答案中添加的触发器的屏幕截图相同,除了它的第一列显示表单脚本中的方法,下一列显示:From-Form,在第三列中您选择:提交时。
通常,您的方法将收到一个事件 e ,其 e.values 与电子表格中保存的值相同。所以
函数表单提交(e){ ...
似乎有两个应用程序会触发代码:(1)表单和(2)链接到表单响应的电子表格。
(1) 正如上面 Mogsdad 和 JohnB 所指出的,由于事件没有发送到函数,因此无法通过表单以编程方式做很多事情。例如,可以发送一封电子邮件“提交表单”或“打开打开”,但没有事件对象,甚至无法记录数量或行数,也无法记录有关文档或提交的任何内容。
(2) 但是,如果电子表格链接到表单的响应,则可以在电子表格上设置触发器,其中可以访问事件以及行、列和其他数据。
从链接的响应谷歌电子表格:
代码.gs:
function onSpreadsheetSubmit(e) {
var row = e.range.getRow();
MailApp.sendEmail("me@example.com",
"Your subject, rows: "+ row,
"A new application has been submitted on row: "+
row,
{name:"From your friendly spreadsheet"});
}
欲了解更多信息:https ://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
上面的 JohnB 的 HOWTO 非常好。更新(2017 年 11 月):
上述许多步骤都需要表单所有者的验证/接受。
我建议使用表单中的触发器。在您的表单中打开脚本编辑器并粘贴代码:
function onFormSubmit(e) {
// for tests
if (!e) {
// test object
var form = FormApp.getActiveForm()
var responses = form.getResponses();
e = {"authMode":"FULL",
"response": responses[responses.length - 1], // last response
"source": form,
"triggerUid":"5125265"};
};
// do your job here
try {
// paste useful code here...
//
//
}
catch (err) {
MailApp.sendEmail("testemail@test.com",
"Error in the app",
"New error, please check.\n\n" +
"Here is the event object:\n" +
e + "\n" +
JSON.stringify(e) + "\n\n" +
"Here's an error:\n" + err,
{name:"From Name"});
throw err;
}
return 0;
}
将此功能设置为可安装触发器。
参考: