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

使用Filter&Map函数无法从Google Sheets数组获取第3列邮箱求助

问题:使用filter和map从Google Sheets数组提取第3列邮箱时返回空数组

在通过Google表单提交事件,结合filter和map函数从Google Sheets数据中提取对应邮箱地址时,日志输出为空数组,请求分析问题原因。

相关代码

/**
 * Retrieves email addresses from a sheet based on selected names from a form.
 *
 * @param {object} e - Form submit event object.
 * @return {string} - A comma-separated string of email addresses.
 */
function getEmailAddresses(e) {
  // Get the responses from the form.
  const responses = e.response.getItemResponses();

  // Extract the selected names from the checkboxes.
  const eList = responses.find(item => item.getItem().getTitle() === 'E List').getResponse();

  // Get the spreadsheet and sheet.
  const ss = SpreadsheetApp.openById("SHEET_ID");
  const shet = ss.getSheetByName('ECI');

  const data = shet.getRange(2, 1, shet.getLastRow()-1, 3).getValues();

  // Logger.log(data);

  // Filter the data based on selected names and extract email addresses.
  // Assuming first name is in column 1 and last name in column 2
  // Assuming email is in column 3
  const emailAddresses = data.filter(row => eList.includes(`${row[0]} ${row[1]}`)).map(row => row[2]);
  Logger.log(emailAddresses);

  // Return the email addresses as a comma-separated string.
  return emailAddresses.join(',');
}

相关数据

eList(表单选中的名单数据)

名姓邮箱电话
AaA@email.com12345
BbB@email.com67890
CcC@email.com12346

data(从Sheets获取的数组数据)

名姓邮箱
AaA@email.com
BbB@email.com
CcC@email.com

问题原因分析

  • eList数据格式不匹配:代码里eList是通过表单复选框getResponse()获取的,该方法返回的是选中选项的字符串数组(比如["A a", "B b"]),但你提供的eList是多列表格结构,说明你误解了返回格式。如果表单复选框的选项不是"名 姓"的组合格式(比如选项是单独的名/姓,或格式为"姓,名"),eList.includes(${row[0]} ${row[1]})就会匹配失败,导致filter后得到空数组。
  • 字符匹配细节问题:即便选项格式是"名 姓",也要检查Sheets单元格里的row[0]/row[1]是否有多余空格、大小写不一致(比如表单选项是"A A"但Sheets里是"A a"),这些差异会让includes判断为false。
  • 表单标题匹配错误:responses.find(item => item.getItem().getTitle() === 'E List')如果表单复选框的标题不是完全一致的"E List"(比如大小写、空格差异,如"e list"或"E list"),会导致find返回undefined,调用getResponse()直接报错,后续逻辑无法执行。
  • 数据范围获取错误:shet.getRange(2, 1, shet.getLastRow()-1, 3)如果表格第一行不是表头,或getLastRow()返回的行数不准确(比如表格存在空白行导致行数统计偏少),会让data数组为空或不包含目标数据,filter后自然为空。

内容的提问来源于stack exchange,提问作者Mikal D Chavez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:48:28