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

基于谷歌表格实现谷歌表单组选后自动填充球手姓名

实现Google Forms选组后自动填充球手姓名的方案

作为有Excel VBA经验的开发者,Google Apps Script对你来说会很熟悉——它相当于云端版的VBA,能轻松联动Google Sheets和Forms。下面是一步步的落地方案:

1. 先整理你的Google Sheet数据结构

确保存储4人组信息的工作表有清晰的格式,建议命名为Groups:

  • A列:组名(Flight/4-ball group)(作为表单下拉选项的数据源)
  • B-E列:对应组的4位球手姓名

示例结构:

组名球手1球手2球手3球手4
上午组1张三李四王五赵六
下午组2孙七周八吴九郑十

2. 配置Google Forms基础问题

先搭好表单的基础框架:

  • 第一个问题:下拉选择题,标题设为「选择4人组」,暂时可以手动填几个组名(后续脚本会自动同步)
  • 后续添加4个短文本问题,标题分别为「球手1」「球手2」「球手3」「球手4」(这些就是要自动填充的字段)

3. 用Google Apps Script实现联动

3.1 自动同步组名到表单下拉选项

先写一个脚本,把Sheet里的组名自动同步到表单的下拉问题,避免手动维护:

function syncGroupOptions() {
  // 替换为你的Sheet ID和表单ID
  const sheetId = "你的Google Sheet ID";
  const formId = "你的Google Forms ID";
  
  const sheet = SpreadsheetApp.openById(sheetId).getSheetByName("Groups");
  const form = FormApp.openById(formId);
  
  // 获取Sheet里的组名(A列,从第2行开始跳过表头)
  const groupNames = sheet.getRange(2, 1, sheet.getLastRow()-1, 1).getValues().flat();
  
  // 获取表单的第一个下拉问题(假设是第一个问题,索引从0开始)
  const groupQuestion = form.getItem(0).asListItem();
  
  // 更新下拉选项
  groupQuestion.setChoiceValues(groupNames);
}

运行一次这个脚本,表单的下拉选项就会和Sheet里的组名同步。你也可以设置时间驱动触发器,让它定期自动同步组名。

3.2 实现选组后实时填充球手姓名

因为原生Google Forms不支持实时前端交互,我们用自定义Web App表单来实现(逻辑和Excel用户表单很像,对你来说上手快):

  1. 在脚本编辑器中,点击「文件>新建>HTML文件」,命名为Index,粘贴以下代码:
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <style>
      .form-container { max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ddd; }
      .form-group { margin-bottom: 15px; }
      label { display: block; margin-bottom: 5px; font-weight: bold; }
      select, input { width: 100%; padding: 8px; box-sizing: border-box; }
      button { padding: 10px 20px; background: #4285F4; color: white; border: none; border-radius: 4px; cursor: pointer; }
    </style>
  </head>
  <body>
    <div class="form-container">
      <h2>逐洞计分表单</h2>
      <div class="form-group">
        <label for="groupSelect">选择4人组:</label>
        <select id="groupSelect" onchange="fillGolfers()">
          <option value="">请选择组</option>
          <!-- 组名将通过JS动态加载 -->
        </select>
      </div>
      <div class="form-group">
        <label for="golfer1">球手1:</label>
        <input type="text" id="golfer1" readonly>
      </div>
      <div class="form-group">
        <label for="golfer2">球手2:</label>
        <input type="text" id="golfer2" readonly>
      </div>
      <div class="form-group">
        <label for="golfer3">球手3:</label>
        <input type="text" id="golfer3" readonly>
      </div>
      <div class="form-group">
        <label for="golfer4">球手4:</label>
        <input type="text" id="golfer4" readonly>
      </div>
      <!-- 在这里添加逐洞计分的字段,比如<input type="number" id="hole1" placeholder="洞1分数"> -->
      <button onclick="submitForm()">提交表单</button>
    </div>

    <script>
      // 页面加载时加载所有组名
      window.onload = function() {
        google.script.run.withSuccessHandler(function(groups) {
          const select = document.getElementById("groupSelect");
          groups.forEach(group => {
            const option = document.createElement("option");
            option.value = group.name;
            option.textContent = group.name;
            select.appendChild(option);
          });
        }).getAllGroups();
      }

      // 选择组后自动填充球手姓名
      function fillGolfers() {
        const selectedGroup = document.getElementById("groupSelect").value;
        if (!selectedGroup) return;
        
        google.script.run.withSuccessHandler(function(golfers) {
          document.getElementById("golfer1").value = golfers[0];
          document.getElementById("golfer2").value = golfers[1];
          document.getElementById("golfer3").value = golfers[2];
          document.getElementById("golfer4").value = golfers[3];
        }).getGolfersByGroup(selectedGroup);
      }

      // 提交表单数据到Google Sheets
      function submitForm() {
        const formData = {
          group: document.getElementById("groupSelect").value,
          golfer1: document.getElementById("golfer1").value,
          golfer2: document.getElementById("golfer2").value,
          golfer3: document.getElementById("golfer3").value,
          golfer4: document.getElementById("golfer4").value,
          // 在这里添加逐洞计分的字段值,比如hole1: document.getElementById("hole1").value
        };
        
        google.script.run.withSuccessHandler(function() {
          alert("表单提交成功!");
          // 重置表单
          document.getElementById("groupSelect").value = "";
          document.getElementById("golfer1").value = "";
          document.getElementById("golfer2").value = "";
          document.getElementById("golfer3").value = "";
          document.getElementById("golfer4").value = "";
        }).submitFormData(formData);
      }
    </script>
  </body>
</html>
  1. 回到脚本编辑器的Code.gs文件,替换为以下代码:
const SHEET_ID = "你的Google Sheet ID";
const GROUPS_SHEET_NAME = "Groups";
const RESPONSES_SHEET_NAME = "Responses"; // 存储表单提交数据的工作表

// 获取所有组名
function getAllGroups() {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(GROUPS_SHEET_NAME);
  const data = sheet.getRange(2, 1, sheet.getLastRow()-1, 5).getValues();
  return data.map(row => ({ name: row[0] }));
}

// 根据组名获取对应球手
function getGolfersByGroup(groupName) {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(GROUPS_SHEET_NAME);
  const data = sheet.getRange(2, 1, sheet.getLastRow()-1, 5).getValues();
  const group = data.find(row => row[0] === groupName);
  return group ? group.slice(1) : [];
}

// 提交表单数据到Sheet
function submitFormData(formData) {
  let sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(RESPONSES_SHEET_NAME);
  // 如果Responses工作表不存在,自动创建并添加表头
  if (!sheet) {
    sheet = SpreadsheetApp.openById(SHEET_ID).insertSheet(RESPONSES_SHEET_NAME);
    sheet.appendRow(["提交时间", "组名", "球手1", "球手2", "球手3", "球手4"]);
    // 如果有逐洞计分字段,在这里添加对应的表头,比如"洞1", "洞2"...
  }
  // 写入表单数据
  sheet.appendRow([
    new Date(),
    formData.group,
    formData.golfer1,
    formData.golfer2,
    formData.golfer3,
    formData.golfer4
    // 在这里添加逐洞计分的字段值
  ]);
}

// 发布Web App的入口函数
function doGet() {
  return HtmlService.createHtmlOutputFromFile("Index");
}
  1. 发布Web App:
    • 点击脚本编辑器右上角的「部署>新部署」
    • 类型选择「Web应用」
    • 执行:选择「我」
    • 谁可以访问:根据需求选择(比如「任何人,甚至匿名」适合公开使用)
    • 点击「部署」,复制生成的链接,这就是你的自定义计分表单入口

4. 适配小贴士

  • 如果你坚持用原生Google Forms,只能用onFormSubmit触发器实现提交后填充,但无法做到实时交互,不如Web App灵活
  • 这个Web App的逻辑和Excel用户表单高度相似:HTML对应表单界面,JS对应前端交互,Code.gs对应后端逻辑(就像VBA模块),对你来说应该很快能上手调整

内容的提问来源于stack exchange,提问作者Dheeraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:12:42