Google 表单的 Google Apps Script:初学者指南
快速回答:Google Apps Script 是 Google 免费的、内置的 JavaScript 平台,用于自动化表单、表格和其他 Workspace 应用。人们靠它添加表单原生不具备的功能——比如每次提交都给所有者发邮件、自动限制回复数量,或生成 PDF 确认信。它确实需要基础的编程知识,这才是它真正的入门门槛。
Google 表单刻意保持简单,这意味着很多常见需求——"有人提交时给我发邮件""满 50 份后停止接受回复""以表单不支持的方式验证这个字段"——都不是开箱即用的。Google Apps Script 是 Google 提供给你、用来自己填补这个空白的工具,完全免费,也不需要离开 Google 生态。本指南将解释它是什么、它对你的表单能实际做到什么、一个说明其结构的简单示例,以及它真正适合谁。
什么是 Google Apps Script?
Apps Script 是 Google 内置的脚本平台,基于 JavaScript,让你能编写与 Google Workspace 应用交互的小程序——表单、表格、文档、Gmail、日历等等。它完全运行在 Google 的服务器上,所以没有什么需要安装,也没有单独的主机需要管理。你可以从两个地方之一进入:在表单的三点菜单中选择脚本编辑器,或者打开关联的 Google 表格,进入扩展程序 > Apps Script。两条路径打开的是同一类编辑器,只是挂在表单上的脚本和挂在表格上的脚本,起始上下文略有不同。
Apps Script 能做到而表单原生不提供的事
- 每次有新提交都自动给表单所有者发邮件。Google 表单没有针对这一点的原生通知设置——最接近的内置选项是定期发送新回复的摘要邮件,而不是即时通知。Apps Script 可以在收到回复的那一刻就发出邮件,这对支持请求或紧急报名这类时间敏感的表单很重要。如果你在排查为什么完全收不到回复通知,那是一个相关但不同的问题——参见我们的Google 表单不接受回复指南。
- 按天数或数量自动限制回复。第三方的"回复限制"插件,把表单限制在比如 50 份提交或在特定日期后关闭,这些插件本身通常也是建立在 Apps Script 触发器之上的,通过检查回复数量或日期并以编程方式关闭表单。我们关于达到回复上限后关闭 Google 表单的指南同时涵盖了插件方式和其背后的原理。
- 表单原生做不到的自定义验证。表单内置的验证仅限于单个字段上的基本规则,比如数字范围或正则表达式。Apps Script 可以把多个答案互相交叉核对,或者与外部数据核对,这是原生验证选项做不到的。
- 自动生成 PDF 确认信。脚本可以获取一份新回复,把它格式化成文档,转换为 PDF,再作为收据或确认信发回给填表人——这对报名、申请和订单表单很有用。
一个简单示例,从概念上解释
下面是一个在有人提交时给表单所有者发邮件的脚本大致样子。这是为了说明结构而举的例子——不是可以直接复制粘贴、无需适配你表单实际问题就能用于生产的代码。
function onFormSubmit(e) {
// e.response 保存提交的表单回复
var responses = e.response.getItemResponses();
var summary = "";
responses.forEach(function (itemResponse) {
summary += itemResponse.getItem().getTitle() + ": " + itemResponse.getResponse() + "\n";
});
// 给所有者发一封包含新回复的邮件
MailApp.sendEmail("[email protected]", "New form response", summary);
}
关键部分:onFormSubmit(e) 是一个触发函数——当有新回复进来时,Apps Script 会自动调用它,而 e 保存着事件数据,包括 e.response,它让你能通过 getItemResponses() 访问每一个答案。从那里开始,脚本可以做任何 Apps Script 服务支持的事——发邮件、写入表格、调用外部 API、生成文档。触发器本身是在编辑器的触发器面板中单独配置的,在那里你告诉它在"表单提交时"运行这个函数。
逐步设置
- 打开脚本编辑器,从表单的三点菜单,或者在关联的表格上通过扩展程序 > Apps Script。
- 编写一个像上面示例那样的触发函数,从事件对象中读取提交的答案。
- 添加你的自动化逻辑——你想运行的实际邮件、PDF 或检查动作。
- 在触发器部分设置触发器(左侧边栏的时钟图标),添加一个新触发器,让你的函数在"来自表单"/"表单提交时"事件上运行。
- 授权并测试。第一次运行时会提示你授予脚本访问你表单和 Gmail 的权限;批准之后,提交一个真实的测试回复,确认一切都能正确触发。
去哪里了解更多
Apps Script 有 Google 直接提供的详尽官方文档,涵盖 Forms 服务、触发器,以及它能触及的其他每一个 Workspace 应用。如果你认真想编写自己的脚本,那是最可靠、最新的参考资料,因为它与产品本身同步维护,而不是由第三方维护。
除了"表单提交时"之外的常见触发器
表单提交是最常见的触发器,但对于表单来说并不是唯一有用的。基于时间的触发器(同样在触发器面板中设置)可以按计划运行——每小时、每天,或在特定时间——不依赖于是否有人提交了回复。这正是驱动诸如在设定日期自动关闭表单、发送当天回复的每日摘要而不是每次提交都发一封邮件,或者把旧回复滚动归档到单独表格等定时操作的机制。基于编辑器的触发器(onEdit)会在有人修改关联电子表格中的某个单元格时触发,如果你想让脚本在你手动把某条回复在状态列中标记为"已处理"或"已批准"时做出反应,这就很有用。
排查 Apps Script 问题
- 提交表单时脚本没有运行:确认触发器确实已经保存,并且指向的是"表单提交时",而不是其他事件类型——之前测试会话中创建的触发器可能会悄悄和一个新的、配置错误的触发器同时存在,所以检查触发器面板中是否有重复项。
- 每次运行都出现"需要授权"错误:如果你更改了 Google 账户密码,或者 Google 定期重新检查像 Gmail 发送这样的敏感权限范围,Apps Script 的权限可能会被撤销。在编辑器中手动重新运行一次脚本,以重新触发授权提示。
- 手动运行脚本能成功,但自动运行不行:有些 Apps Script 服务(比如显示一个 UI 对话框)只有在人工直接运行脚本时才有效,而不能从自动触发器中调用——自动触发器必须使用非交互式的操作,比如发送邮件或写入表格。
- 邮件没有发送:Apps Script 的免费版有每日邮件配额(Google Workspace 账户比个人 Gmail 账户更高)——高流量的表单可能会碰到这个上限,导致当天晚些时候的邮件悄悄发送失败。
诚实的入门门槛
Apps Script 需要实际的编程——具体来说,是基础的 JavaScript。它不是无代码工具,如果你从未写过代码,把它当成一个简单的设置开关来对待会让你感到沮丧。对于有动力的初学者来说,读懂并改编上面那样的简短示例是现实可行的,但要构建更复杂的东西,比如多步骤验证或 PDF 生成,就需要真正的编程知识。
这个门槛正是无代码第三方插件为那些需要自动化但不想写脚本的人所填补的空白,也正是像 FormMaker 这样专门打造的应用为一个完全不同的问题所填补的空白——在手机上创建和管理表单本身,完全不需要碰代码。两者都无法替代 Apps Script 在深度定制方面的作用,但也都不需要用到它。
常见问题
什么是 Google Apps Script?
Google Apps Script 是 Google 内置的、基于 JavaScript 的平台,用于自动化和扩展 Google Workspace 应用,包括表单、表格和 Gmail。它运行在 Google 的服务器上,免费使用,不需要单独安装。
Google 表单能在有人提交时自动发送邮件吗?
原生不支持。Google 表单没有内置设置能在每次提交时给表单所有者发邮件。Apps Script 可以通过在收到新回复时运行一个小型触发函数来添加这个功能。
使用 Apps Script 需要会写代码吗?
需要,至少要懂基础的 JavaScript。Apps Script 是一个真正的编程环境,不是无代码工具。如果你不想写代码,可以改用无代码插件或专门设计的应用。
去哪里为 Google 表单打开 Apps Script 编辑器?
在你的表单中,进入三点菜单并选择脚本编辑器,或者打开关联的 Google 表格,进入扩展程序 > Apps Script。
Apps Script 每天能发送的邮件数量有限制吗?
有。Apps Script 强制执行每日邮件发送配额,Google Workspace 账户的配额比免费的个人 Gmail 账户更高。每次提交都发邮件的高流量表单可能会碰到这个上限,如果邮件在忙碌的一天中途停止发送,这一点值得检查。