16

如何引用默认的“提交”表单按钮以将“提交”触发器与另一个操作联系起来?谢谢你。

例如,使用 onsubmit,

Logger.log('do something');
4

6 回答 6

22

我没有向电子表格添加脚本以接收来自表单的响应(如 Mogsdad 的回答),而是添加了一个由表单的提交按钮触发的脚本。

第 1 步:首先创建一个 Google 表单

示例 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步:尝试表格。单击表单的提交按钮后,您应该会收到一封电子邮件。

Google Apps 实时表单

于 2014-08-13T20:46:26.470 回答
13

一个没有。表单服务不允许对产品进行任何编程控制。对于这个一般主题,问题跟踪器上有一个未解决的问题。给它加星标以“投票”,并接收更新。

但是,您并没有迷路。在接收表单响应的电子表格中,您可以添加带有可安装触发器的脚本以触发“表单提交”。从那里,您可以对提交的数据做很多事情,包括根据需要记录...但对表单本身没有任何作用。

触发器

这些参考资料解释了触发器和事件。

于 2013-03-28T18:02:28.127 回答
6

这是一个古老的答案。

目前(2014 年 1 月)有两种 onSubmit 方式。一个是简单地创建一个函数 onSubmit() 据称(它对我不起作用......)仅在当前提交用户的许可下允许一组有限的操作。例如,您无法访问他提交的电子邮件,或修改下一次提交的基础表单。

然后是提交触发器,您可以添加并附加到任何函数,并在您自己的权限下做任何您想做的事情。看起来与上面答案中添加的触发器的屏幕截图相同,除了它的第一列显示表单脚本中的方法,下一列显示:From-Form,在第三列中您选择:提交时。

通常,您的方法将收到一个事件 e ,其 e.values 与电子表格中保存的值相同。所以

函数表单提交(e){ ...

于 2014-01-30T17:36:26.123 回答
6

似乎有两个应用程序会触发代码:(1)表单和(2)链接到表单响应的电子表格。

(1) 正如上面 Mogsdad 和 JohnB 所指出的,由于事件没有发送到函数,因此无法通过表单以编程方式做很多事情。例如,可以发送一封电子邮件“提交表单”或“打开打开”,但没有事件对象,甚至无法记录数量或行数,也无法记录有关文档或提交的任何内容。

(2) 但是,如果电子表格链接到表单的响应,则可以在电子表格上设置触发器,其中可以访问事件以及行、列和其他数据。

从链接的响应谷歌电子表格:

  • 第 1 步:工具 > 脚本编辑器
  • 第二步:编写一些代码,例如:

代码.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"});
}
  • 第 3 步:运行 > 运行函数 > onSpreadsheetSubmit(或 |> 图标)
    • 该事件可能没有实际行,因为测试与实际提交无关。
  • 第 4 步:系统会要求您选择用户并进行身份验证
  • 第 5 步:编辑 > 当前项目的触发器(或类似时钟的图标)
  • 第 6 步:添加新触发器
  • 第 7 步:在电子表格提交 | 来自电子表格 | 在表单提交时
  • 第 8 步:验证并保存(或反向)
  • 第 9 步:通过等待(或执行)真实的表单提交进行测试
  • 第 10 步:检查您的电子邮件

欲了解更多信息:https ://developers.google.com/apps-script/guides/triggers/events#google_sheets_events

于 2017-11-02T10:58:10.330 回答
2

上面的 JohnB 的 HOWTO 非常好。更新(2017 年 11 月):

  • 第 2 步:“脚本编辑器...”位于表单右上角的垂直“...”汉堡菜单中
  • 第 6 步:在(类似时钟的图标)(上面显示的第二个图标)中找到“项目触发器”。
  • Step 7: 点击“Add a new trigger”,忽略“no myFunctions”警告。
  • 第8步:似乎不存在,可能没有必要,对我有用。

上述许多步骤都需要表单所有者的验证/接受。

于 2017-11-02T10:03:42.017 回答
0

我建议使用表单中的触发器。在您的表单中打开脚本编辑器并粘贴代码:

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;   
}

将此功能设置为可安装触发器。

参考:

于 2020-10-27T08:04:43.830 回答