You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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);
  }
}

代码修正点&使用步骤

原代码的问题修正

  1. 修复了循环变量不匹配的错误(原代码里用了items.length但定义的是questions)
  2. 把赋值操作=改成了严格相等判断===,同时用官方常量FormApp.ItemType.EMAIL代替字符串判断问题类型,避免拼写错误
  3. 正确获取邮箱问题的可编辑对象(asEmailItem()),而不是直接修改表单结构

如何使用

  1. 打开你的Google Form,点击右上角「扩展程序」→「Apps Script」
  2. 把上面的代码粘贴进去,替换formId为你自己的表单ID
  3. 如果你想让用户一键打开预填充表单,需要部署为Web App:
    • 在Apps Script编辑器里点击「部署」→「新建部署」
    • 类型选「Web应用」,执行权限选「以访问网络的用户身份执行」,访问权限根据需求选择(比如允许域内用户就选「组织内的任何人」,公开的话选「任何人,甚至匿名」)
    • 部署完成后得到一个链接,用户访问这个链接就会自动跳转到已经填好自己邮箱的表单

补充说明

  • 如果你的表单是Google Workspace域内的,也可以开启表单设置里的「收集电子邮件地址」,但这是系统后台收集,不会填充到你自定义的「Email」问题里;我们的方案是直接把邮箱显示在指定的输入框中。
  • Session.getActiveUser().getEmail()只能获取已登录Google账号的用户邮箱,如果用户未登录,代码会抛出错误提示。

内容的提问来源于stack exchange,提问作者psh410

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:33:22