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

Google Apps Script中getRespondentEmail数组去重失败排查

问题根因

代码执行顺序错误。
你在getEmails还是空数组、还未执行循环推入任何邮箱数据的阶段,就提前运行了去重逻辑var uniqueResponses = [...new Set(getEmails)];,此时uniqueResponses已经被赋值为空数组。后续循环往getEmails追加数据的操作,不会反向修改已经完成赋值的uniqueResponses,因此最终日志输出永远为空。

额外注意:form.setCollectEmail(true)仅对设置生效后新提交的表单响应有效,开启设置前产生的历史响应,调用getRespondentEmail()会返回空字符串,直接去重会残留无效空值。

修正后代码
function test(){
  var form = FormApp.openById('替换为你的实际表单ID');
  form.setCollectEmail(true);
  var formResponses = form.getResponses();

  var getEmails = [];
  // 先收集全量有效邮箱
  for (var i = 0; i < formResponses.length; i++) {
    var formResponse = formResponses[i];
    var oneEmail = formResponse.getRespondentEmail();
    // 过滤历史响应产生的空邮箱
    if (oneEmail) {
      getEmails.push(oneEmail);
    }
  }
  // 数据收集完成后再执行去重
  var uniqueResponses = [...new Set(getEmails)];

  Logger.log(uniqueResponses);
}
排查提示
  • 数据处理逻辑需遵循「先收集全量数据,再做去重、过滤、格式转换」的顺序,禁止在数据填充完成前提前计算最终结果
  • 若修正后仍拿到空结果,优先检查表单ID是否正确、当前账号是否有表单访问权限、待处理的响应是否为开启邮箱收集功能后提交的新响应
  • 历史提交的响应无法通过getRespondentEmail()补取提交者邮箱,该接口不会回溯历史数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:33:29