表单提交时表格接收[object Object]而非邮箱值的问题排查
问题原因与修复方案
你遇到的[object Object]问题,根源在于获取邮箱的代码写法错误,具体看这部分:
email = itemResponse.getResponse(i).getValue;
错误点拆解
getResponse()不需要传i参数:itemResponses[i]已经是当前循环到的单个问题响应对象,直接调用getResponse()就能拿到用户输入的邮箱字符串,加i反而会触发错误。.getValue是多余且错误的写法:getResponse()已经直接返回短答案的文本值,不需要额外调用getValue;而且你漏写了方法调用的括号(),这直接让email变量拿到了一个函数对象,写入表格时就会显示[object Object]。
修复后的完整代码
只需要修正获取邮箱的代码段,其余部分可保留:
function onSubmitForm(e) { var formResponse = e.response; var itemResponses = formResponse.getItemResponses(); var email = ""; for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var question = itemResponse.getItem().getTitle(); if (question === 'Digite seu e-mail') { // 修复后的邮箱获取逻辑 email = itemResponse.getResponse(); break; } } myFunction(email); } function myFunction(email) { if (!email || email.length === 0) { console.error('Erro: E-mail não fornecido.'); return; } var ss = SpreadsheetApp.openByUrl('Spreadsheet link removed due to security concerns'); var sheet = ss.getSheetByName('Página1'); var values = sheet.getRange('A:A').getValues(); var emailExiste = false; var linhaEmail; for (var i = 0; i < values.length; i++) { if (values[i][0] === email) { emailExiste = true; linhaEmail = i + 1; break; } } if (emailExiste) { var horasExistentes = parseFloat(sheet.getRange(linhaEmail, 2).getValue()); var horas = horasExistentes + 1.5; sheet.getRange(linhaEmail, 2).setValue(horas); } else { var ultimaLinha = sheet.getLastRow() + 1; sheet.getRange(ultimaLinha, 1).setValue(email); sheet.getRange(ultimaLinha, 2).setValue(1.5); } }
额外优化建议
- 用
findIndex简化邮箱查找逻辑,替代传统for循环:
// 替换原邮箱查找的for循环 var lastRow = sheet.getLastRow(); var values = sheet.getRange(1, 1, lastRow, 1).getValues(); var emailRowIndex = values.findIndex(row => row[0] === email); var emailExiste = emailRowIndex !== -1; var linhaEmail = emailRowIndex + 1;
- 避免遍历整个A列的空行,只读取有内容的单元格范围:
var lastRow = sheet.getLastRow(); var values = sheet.getRange(1, 1, lastRow, 1).getValues();
内容的提问来源于stack exchange,提问作者Henrique Corrêa
相关产品推荐
相关产品推荐

