Google表单Checkbox Grid未选中项无返回值问题求助
解决Google表单Checkbox Grid未选中项无返回值的问题
修改后的代码
function onFormSubmit(e) { // 获取表单响应 var formResponse = e.response; var itemResponses = formResponse.getItemResponses(); var emailBody = "New form response:\n\n"; var e_address = ""; itemResponses.forEach(function(itemResponse) { var title = itemResponse.getItem().getTitle(); var response = itemResponse.getResponse(); // 处理Checkbox Grid组件 if (itemResponse.getItem().getType() === "CHECKBOX_GRID") { var gridItem = itemResponse.getItem().asCheckboxGridItem(); var rows = gridItem.getRows(); var columns = gridItem.getColumns(); var rowResponses = response; // 每行的选中列,数组格式 // 构建包含所有单元格状态的响应(未选中项用null填充) var fullCellResponses = []; rows.forEach(function(_, rowIndex) { // 拆分当前行的选中列(若未选则为空数组) var selectedCols = rowResponses[rowIndex] ? rowResponses[rowIndex].split(',') : []; // 遍历所有列,判断是否选中,未选中则填null columns.forEach(function(col) { fullCellResponses.push(selectedCols.includes(col) ? col : null); }); }); // 将结果转为逗号分隔的字符串(可替换为你需要的标识,比如空字符串) response = fullCellResponses.map(val => val ?? "null").join(','); // 【可选】如果需要更易读的格式(按行展示),替换上面的response赋值为以下代码: // var formattedGrid = rows.map(function(row, rowIndex) { // var selectedCols = rowResponses[rowIndex] ? rowResponses[rowIndex].split(',') : []; // var rowText = `${row}: `; // rowText += columns.map(col => selectedCols.includes(col) ? col : "未选择").join(", "); // return rowText; // }).join("\n"); // response = formattedGrid; } if (title === "Email Address") { e_address = response; } emailBody += `${title}\n${response}\n\n`; }); sendEmail(e_address, emailBody); }
关键逻辑说明
- 获取网格结构:通过
asCheckboxGridItem()转换组件,拿到所有行(尺码)和列(颜色)的列表,确保能覆盖所有单元格。 - 补全未选中项:遍历每一行,拆分该行的选中列,再逐个检查每个颜色列是否被选中——选中则保留列名,未选中则填充你指定的标识(示例用
null,也可换成空字符串或"未选择")。 - 格式化输出:将补全后的所有单元格值拼接成字符串,或按行格式化(可选,更适合邮件阅读)。
为什么原代码无法获取未选中项?
Google表单的Checkbox Grid响应默认仅返回每行选中的列值,不会主动包含未选中项的占位符。通过手动遍历完整的行和列结构,我们可以补全这些缺失的状态,生成符合预期的完整响应数据。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

