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

如何用Google Apps Script实现Google Forms下拉列表按团队过滤?

Google表单员工互评按团队过滤成员的实现方案

完全可以通过Google Apps Script实现这个按团队过滤互评成员的需求,下面是两种实用的实现思路,结合代码示例帮你落地:

方案一:基于分页跳转的静态过滤(推荐,无多用户干扰)

这种方案通过表单分页+批量更新选项实现,每个团队对应独立的分页,用户选择团队后跳转到对应分页,互评下拉仅显示本团队成员。

步骤1:表单结构准备

  1. 在Google表单中添加第一个问题:所属团队(下拉选项,包含marketing、finance、HR等)。
  2. 为每个团队创建独立的分页(Section),比如「营销团队互评」「财务团队互评」等。
  3. 给「所属团队」问题设置根据答案跳转到对应部分的规则,确保选择对应团队后自动进入专属分页。
  4. 在每个团队分页中添加「互评对象」下拉题。

步骤2:编写Apps Script代码

// 配置参数:替换为你的实际ID
const FORM_ID = "你的Google表单ID";
const SHEET_ID = "存储员工团队信息的Google Sheets ID";
// 映射团队名称到对应分页的ID(可在表单编辑页通过开发者工具查看)
const TEAM_TO_SECTION_ID = {
  "marketing": "表单中营销团队分页的ID",
  "finance": "表单中财务团队分页的ID",
  "HR": "表单中HR团队分页的ID"
};

// 批量更新各团队分页的互评下拉选项
function updateTeamPeerOptions() {
  // 读取员工团队数据
  const employeeSheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("员工信息");
  const allData = employeeSheet.getDataRange().getValues();
  
  // 按团队分组成员
  const teamMemberMap = {};
  allData.slice(1).forEach(row => {
    const teamName = row[0];
    const memberName = row[1];
    if (!teamMemberMap[teamName]) teamMemberMap[teamName] = [];
    teamMemberMap[teamName].push(memberName);
  });

  // 更新表单各分页的下拉选项
  const form = FormApp.openById(FORM_ID);
  Object.keys(teamMemberMap).forEach(team => {
    const sectionId = TEAM_TO_SECTION_ID[team];
    if (!sectionId) return;
    
    // 获取对应分页及其中的互评下拉题
    const section = form.getItemById(sectionId).asPageBreakItem();
    const peerDropdown = section.getNextItem().asListItem();
    
    // 更新下拉选项
    peerDropdown.setChoiceValues(teamMemberMap[team]);
  });
}

步骤3:触发与维护

  • 首次运行updateTeamPeerOptions函数,完成初始选项填充。
  • 若员工团队信息有更新,重新运行该函数即可同步选项;也可给员工信息表添加onEdit安装触发,实现数据变更时自动同步。

方案二:动态实时更新(适合单用户场景)

如果需要在同一表单页面实现实时过滤(无需分页跳转),可结合Web App生成预填充链接,但需注意:该方案会修改表单全局选项,多用户同时填写时会互相干扰,仅适合低并发场景。

核心代码示例

const FORM_ID = "你的表单ID";
const SHEET_ID = "员工信息表ID";
const PEER_DROPDOWN_ID = "互评对象下拉题的ID";

// 根据团队名称过滤成员
function getFilteredMembers(teamName) {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("员工信息");
  const data = sheet.getDataRange().getValues();
  return data.slice(1)
    .filter(row => row[0] === teamName)
    .map(row => row[1]);
}

// 更新互评下拉选项
function updatePeerDropdownForTeam(teamName) {
  const form = FormApp.openById(FORM_ID);
  const dropdown = form.getItemById(PEER_DROPDOWN_ID).asListItem();
  dropdown.setChoiceValues(getFilteredMembers(teamName));
}

你可以将updatePeerDropdownForTeam函数绑定到表单的onOpen触发,或者通过Web App接收团队参数调用该函数,实现用户选择团队后更新下拉选项。

内容的提问来源于stack exchange,提问作者Ana Carolina Ramos - Inspira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:13:16