如何用Google Apps Script检查Google表单复选框选项是否选中
解决Google表单提交后根据复选框选项发送对应文档邮件的问题
核心思路
不用硬编码所有选项组合,直接利用数组的includes()方法检查单个选项是否被选中,再通过选项-文档映射表关联每个选项对应的邮件模板文档,新增/修改选项时仅需更新映射表,无需改动逻辑代码。
修改后的完整代码
// 定义每个选项对应的邮件模板文档URL,键为复选框选项值,值为对应文档链接 var CLASS_DOC_MAP = { 'a': '文档A的URL', 'b': '文档B的URL', 'c': '文档C的URL', 'd': '文档D的URL' }; function sendEmail(e) { var responses = e.namedValues; var recipient_name = responses['What is your full name?'][0].trim(); var recipient_email = responses['Email address'][0].trim(); var recipient_classes = responses['Which classes are you interested in attending?']; Logger.log(recipient_classes); // 拼接所有选中选项对应的邮件内容 var emailBodyParts = []; for (var option in CLASS_DOC_MAP) { // 检查当前选项是否被用户选中 if (recipient_classes.includes(option)) { var docUrl = CLASS_DOC_MAP[option]; var docHtml = docToHtml(DocumentApp.openByUrl(docUrl).getId()); emailBodyParts.push(docHtml); } } // 处理未选中任何选项的情况 if (emailBodyParts.length === 0) { emailBodyParts.push('<p>您没有选择任何课程,如有疑问请联系管理员。</p>'); } var email_subject = `${recipient_name} 这里是您的课程详情!`; MailApp.sendEmail({ to: recipient_email, subject: email_subject, htmlBody: emailBodyParts.join('<hr>'), // 用水平线分隔不同课程内容 }); } function docToHtml(docId) { // 下载Google文档为HTML字符串 var url = 'https://docs.google.com/feeds/download/documents/export/Export?id=' + docId + '&exportFormat=html'; var param = { method: 'get', headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}, muteHttpExceptions: true, }; return UrlFetchApp.fetch(url, param).getContentText(); }
关键说明
- 选项-文档映射表:
CLASS_DOC_MAP将复选框选项与对应文档URL绑定,后续新增选项只需添加键值对,无需修改发送逻辑。 - 检查选中状态:通过
recipient_classes.includes(option)直接判断选项是否在用户提交的数组中,简洁高效。 - 邮件内容拼接:将选中选项对应的文档HTML内容拼接,用
<hr>分隔保证结构清晰。 - 修复原代码问题:原代码中
recipient_name未取数组的[0],而e.namedValues返回的所有值均为数组类型,需用[0]获取实际值。
内容的提问来源于stack exchange,提问作者AtassiCodes
相关产品推荐
相关产品推荐

