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

如何通过Apps Script提交设置为响应者输入收集邮箱的Google表单?

解决Google Forms脚本无法提交响应者邮箱的问题

当表单开启“响应者输入”模式收集邮箱时,这个邮箱收集功能属于表单的全局设置项,而非普通的表单问题,因此不会出现在form.getItems()返回的结果里。要在脚本中提交响应者邮箱,无需创建对应的ItemResponse,直接调用FormResponse.setRespondentEmail()方法即可。

修改后的完整脚本

function submitForm(){
  var form = FormApp.openById(formId);
  var items = form.getItems();

  // 移除表单中的分页符
  for (var i = 0; i < items.length; i++){
    Logger.log(items[i].getType())
    Logger.log(items[i].getTitle())
    if(items[i].getType() == FormApp.ItemType.PAGE_BREAK){
      items.splice(i,1);
    }
  }

  var currentDateTime = Utilities.formatDate(new Date(), 'America/New_York', 'MM/dd/yyyy hh:mm:ss');

  var answers = [[`sample response`,`sample response`,[`sample1`,`sample2`],`sample response`,`sample response`,`sample response`,new Date(),`sample response`,`sample response`,`sample response`,`sample response`,`sample response`,new Date(),`sample response`,`sample response`,`sample response`,`sample response`,new Date(),`respondersEmail@gmail.com`]];

  // 遍历每一组回答数据
  for (var i = 0; i < answers.length; i++) {
    var formResponse = form.createResponse();
    
    // 处理普通表单问题项
    for(var j = 0; j < items.length; j++){
        var item = items[j];
        var itemResponse;

        // 根据问题类型创建对应响应
        switch (item.getType()) {
          case FormApp.ItemType.DATE:
            itemResponse = item.asDateItem().createResponse(answers[i][j]);
            break;
        
          case FormApp.ItemType.TEXT:
            itemResponse = item.asTextItem().createResponse(answers[i][j]);
            break;

          case FormApp.ItemType.MULTIPLE_CHOICE:
            itemResponse = item.asMultipleChoiceItem().createResponse(answers[i][j]);
            break;

          case FormApp.ItemType.CHECKBOX:
            itemResponse = item.asCheckboxItem().createResponse(answers[i][j]);
            break;

          case FormApp.ItemType.PARAGRAPH_TEXT:
            itemResponse = item.asParagraphTextItem().createResponse(answers[i][j]);
            break;
          
          case FormApp.ItemType.LIST:
            itemResponse = item.asListItem().createResponse(answers[i][j]);
            break;
        }
      
      formResponse.withItemResponse(itemResponse);       
    }

    // 单独设置响应者邮箱(核心步骤)
    var respondentEmail = answers[i][items.length];
    if(respondentEmail){
      formResponse.setRespondentEmail(respondentEmail);
    }

    // 提交表单响应
    formResponse.submit();
  }
}

关键说明

  • setRespondentEmail()是FormResponse对象的专属方法,专门用于设置响应者邮箱,前提是表单已开启“收集响应者邮箱”且设置为“响应者输入”模式。
  • 原answers数组中最后一项为邮箱数据,由于前面items.length个元素对应所有普通表单问题,因此邮箱的索引为items.length,直接取出后传入方法即可完成设置。

内容的提问来源于stack exchange,提问作者H.I. McDunnough

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:33:15