Google表单开放可见但仅指定用户可提交的AppScript脚本失效求助
问题排查与修复方案
1. 先修复脚本的语法错误
原脚本存在两个致命语法问题,直接导致无法运行:
- 表单ID为空:
FormApp.openById('')里必须填入你的Google表单实际ID(从表单URL提取,比如https://docs.google.com/forms/d/ABC123XXX/edit中的ABC123XXX) - 字符串未闭合:判断条件里的
'123@gmail.com少了结尾的单引号,应该写成'123@gmail.com'
2. 完善脚本逻辑(核心修复)
原脚本只处理了指定用户的允许逻辑,完全没覆盖非授权用户的限制逻辑,而且初始逻辑有漏洞。以下是修正后的完整脚本:
function restrictSubmissions() { // 替换为你的表单ID const FORM_ID = '你的Google表单ID'; // 替换为允许提交的用户邮箱 const ALLOWED_EMAIL = '123@gmail.com'; const form = FormApp.openById(FORM_ID); const currentUserEmail = Session.getActiveUser().getEmail(); if (currentUserEmail === ALLOWED_EMAIL) { // 授权用户访问时,开放提交权限 form.setAcceptingResponses(true); form.setCustomClosedFormMessage('欢迎提交表单!'); } else { // 非授权用户访问时,关闭提交权限并提示 form.setAcceptingResponses(false); form.setCustomClosedFormMessage('抱歉,你没有提交权限。'); } }
3. 调整表单基础权限设置
要实现「所有人可见但仅指定用户可提交」,必须先调整表单的全局权限:
- 打开你的Google表单,点击右上角「设置」→「权限」
- 将「谁可以查看或填写表单」设置为「任何人(包括匿名用户)」,确保工作域外用户能正常看到表单
- 初始状态把「接受响应」改为关闭,这样只有授权用户访问时才会被脚本自动打开提交权限
4. 验证触发器配置
检查你设置的触发器是否符合要求:
- 在App脚本编辑器左侧点击「触发器」图标
- 确认触发器的事件类型是「表单打开时」,绑定的函数是修正后的
restrictSubmissions,部署类型选择「Head」 - 注意:匿名用户或未登录Google的用户访问时,
Session.getActiveUser()会返回空值,脚本会自动关闭提交权限,符合需求
内容的提问来源于stack exchange,提问作者Arvind Saravanan
相关产品推荐
相关产品推荐

