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

使用Google Apps Script与Google Sheets生成Google Forms合并列下拉选项问题

解决Google Sheets合并姓名生成Forms下拉选项的问题

你的核心需求是把命名范围firstLast里每行的名(A列)和姓(B列)合并成完整姓名,同时过滤空行。之前的代码问题出在这两点:

  • 用flat()会把二维数组拆成一维,导致名和姓分开成单独的项
  • 直接用filter(String)无法过滤空行,因为空行是["", ""],转成字符串是逗号,不是空值

正确代码示例

function getFullNames() {
  // 获取当前活动表格
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 获取命名范围的所有值(返回二维数组,每行是[名, 姓])
  var nameRange = sheet.getRange('firstLast').getValues();
  
  // 处理数组:过滤空行 + 合并姓名
  var nameList = nameRange
    // 过滤掉名或姓为空的行(如果允许单一项,可改成row[0] || row[1])
    .filter(row => row[0] && row[1])
    // 将每行的名和姓拼接成"名 姓"格式
    .map(row => `${row[0]} ${row[1]}`);
  
  console.log(nameList);
  return nameList; // 返回处理后的姓名列表,供表单调用
}

代码解释

  1. filter(row => row[0] && row[1]):只保留名和姓都不为空的行,避免生成空的或不完整的姓名选项
  2. map(row => ${row[0]} ${row[1]}):用模板字符串把每行的两个元素拼接成完整姓名,格式更直观

额外提示

如果需要允许只有名或只有姓的情况,把过滤和拼接逻辑改成这样:

var nameList = nameRange
  .filter(row => row[0] || row[1]) // 只要名或姓有一个不为空就保留
  .map(row => {
    // 拼接时自动处理空值,避免出现多余空格
    let fullName = row[0] || '';
    if (row[1]) fullName += ` ${row[1]}`;
    return fullName;
  });

如果要直接把这个列表设置到Google Forms的下拉选项里,添加这段代码(替换成你的表单ID和下拉项ID):

// 打开目标表单
var form = FormApp.openById('你的表单ID');
// 获取下拉选项控件并设置选项
form.getItemById('下拉项的ID').asListItem().setChoiceValues(nameList);

内容的提问来源于stack exchange,提问作者Lance Killian almostinfamous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:10:10