如何在Google Form加载时自动填充登录用户的邮箱?
自动填充Google Form登录用户邮箱到指定问题的解决方案
你原来的代码有几个语法和逻辑上的小问题,而且直接修改表单问题的思路其实走偏了——这么做会把所有访问者的邮箱都设置成同一个(就是执行脚本时那个用户的邮箱),显然不是你想要的效果。
下面是正确的实现思路和完善后的代码:
核心思路
要让每个用户打开表单时自动填充自己的登录邮箱,我们得通过生成预填充链接的方式来实现:先获取当前用户的邮箱,再生成带有该邮箱预填充参数的表单链接,用户访问这个链接时,邮箱就会自动填到你指定的「Email」问题里。
完善后的代码(基于Google Apps Script)
function getPrefilledFormUrl() { // 获取当前登录用户的邮箱 var userEmail = Session.getActiveUser().getEmail(); if (!userEmail) { throw new Error("无法获取用户邮箱,请确保已登录Google账号"); } // 替换成你的表单ID(表单URL里d/和/edit之间的字符串) var formId = "你的表单ID"; var form = FormApp.openById(formId); // 找到标题为"Email"的邮箱类型问题 var emailQuestion = null; var items = form.getItems(); for (var i = 0; i < items.length; i++) { var item = items[i]; // 匹配标题(忽略大小写),同时确保是邮箱类型问题 if (item.getTitle().toLowerCase() === "email" && item.getType() === FormApp.ItemType.EMAIL) { emailQuestion = item.asEmailItem(); break; } } if (!emailQuestion) { throw new Error("未找到标题为'Email'的邮箱类型问题,请检查表单问题设置"); } // 生成预填充表单链接 var prefilledUrl = form.createResponse() .withItemResponse(emailQuestion.createResponse(userEmail)) .toPrefilledUrl(); Logger.log("预填充链接:" + prefilledUrl); return prefilledUrl; } // 如果想让用户通过链接直接跳转预填充表单,添加这个Web App入口函数 function doGet(e) { try { var prefilledUrl = getPrefilledFormUrl(); // 自动跳转到预填充好邮箱的表单页面 return HtmlService.createHtmlOutput("<script>window.location.href='" + prefilledUrl + "';</script>"); } catch (error) { return HtmlService.createHtmlOutput("出错了:" + error.message); } }
代码修正点&使用步骤
原代码的问题修正
- 修复了循环变量不匹配的错误(原代码里用了
items.length但定义的是questions) - 把赋值操作
=改成了严格相等判断===,同时用官方常量FormApp.ItemType.EMAIL代替字符串判断问题类型,避免拼写错误 - 正确获取邮箱问题的可编辑对象(
asEmailItem()),而不是直接修改表单结构
如何使用
- 打开你的Google Form,点击右上角「扩展程序」→「Apps Script」
- 把上面的代码粘贴进去,替换
formId为你自己的表单ID - 如果你想让用户一键打开预填充表单,需要部署为Web App:
- 在Apps Script编辑器里点击「部署」→「新建部署」
- 类型选「Web应用」,执行权限选「以访问网络的用户身份执行」,访问权限根据需求选择(比如允许域内用户就选「组织内的任何人」,公开的话选「任何人,甚至匿名」)
- 部署完成后得到一个链接,用户访问这个链接就会自动跳转到已经填好自己邮箱的表单
补充说明
- 如果你的表单是Google Workspace域内的,也可以开启表单设置里的「收集电子邮件地址」,但这是系统后台收集,不会填充到你自定义的「Email」问题里;我们的方案是直接把邮箱显示在指定的输入框中。
Session.getActiveUser().getEmail()只能获取已登录Google账号的用户邮箱,如果用户未登录,代码会抛出错误提示。
内容的提问来源于stack exchange,提问作者psh410
相关产品推荐
相关产品推荐

