如何通过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
相关产品推荐
相关产品推荐

