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

基于Google Apps Script实现从Google Sheets自动生成Google Form简答题的技术咨询

基于Google Apps Script实现从Google Sheets自动生成Google Form简答题的技术咨询

当然可以实现!用Google Apps Script就能完美解决你每次手动更新表单的麻烦,下面是一步步的实操方案,亲测好用:

一、先规整你的Google Sheet结构

首先确保商品列表格式清晰:

  • 建议单独用一个工作表(比如命名为「在售商品」)存放商品信息
  • A列作为商品名称列,第一行设为表头(比如「商品名称」),从第2行开始填写具体商品名,尽量不要留空行(脚本会自动跳过偶尔出现的空行)

二、编写Google Apps Script代码

  1. 打开你的Google Form,点击顶部菜单的「扩展程序」→「Apps Script」,进入脚本编辑器
  2. 清空默认的示例代码,粘贴下面的脚本(记得替换里面的ID和工作表名称):
function syncSheetToForm() {
  // 👇 替换成你自己的Google Sheet ID和Form ID
  const sheetId = "你的Google Sheet ID";
  const formId = "你的Google Form ID";
  
  // 获取工作表和表单对象
  const sheet = SpreadsheetApp.openById(sheetId).getSheetByName("在售商品"); // 替换为你的工作表名称
  const form = FormApp.openById(formId);
  
  // 清空表单中所有现有问题(如果需要保留固定问题,看后面的注意事项)
  const allItems = form.getItems();
  // 倒序删除,避免索引混乱
  for (let i = allItems.length - 1; i >= 0; i--) {
    form.deleteItem(i);
  }
  
  // 读取Sheet中的商品名称(从第2行开始,跳过表头)
  const itemList = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues().flat();
  
  // 遍历每个商品,创建对应的简答题
  itemList.forEach(itemName => {
    // 跳过空行,避免生成无效问题
    if (itemName.trim() !== "") {
      const textQuestion = form.addTextItem();
      textQuestion.setTitle(itemName);
      textQuestion.setHelpText("请输入购买数量(仅接受大于0的整数)");
      
      // 设置数据验证:必须是大于0的整数
      const quantityValidation = FormApp.createTextValidation()
        .setHelpText("数量必须是大于0的整数哦")
        .requireNumber()
        .requireInteger()
        .requireMinNumber(1)
        .build();
      textQuestion.setValidation(quantityValidation);
    }
  });
  
  Logger.log("表单已成功同步最新商品列表!");
}

三、设置自动触发条件

为了让Sheet更新时Form自动同步,需要配置触发器:

  1. 在脚本编辑器左侧点击「触发器」图标(时钟样式)
  2. 点击「添加触发器」,按以下配置:
    • 选择要运行的函数:syncSheetToForm
    • 选择事件源:「电子表格」
    • 选择事件类型:「编辑时」(每次Sheet内容被编辑就触发)或者「更改时」(覆盖更全面的修改场景)
    • 保存后按照提示完成授权(需要允许脚本访问你的Sheet和Form)

四、额外注意事项

  • 如果你的Form需要保留固定问题(比如客户姓名、联系方式),不要直接清空所有问题。可以给固定问题加特定标识(比如标题开头加「固定:」),然后修改脚本里的删除逻辑,跳过这些固定问题:
    // 修改删除逻辑,只删除非固定问题
    for (let i = allItems.length - 1; i >= 0; i--) {
      const itemTitle = allItems[i].getTitle();
      if (!itemTitle.startsWith("固定:")) {
        form.deleteItem(i);
      }
    }
    
  • 测试时可以先手动运行脚本(点击脚本编辑器顶部的运行按钮),检查Form是否正确生成所有商品的简答题,数据验证是否生效
  • 确保Sheet里的商品名称没有特殊字符,避免Form标题显示异常

备注:内容来源于stack exchange,提问作者Randy Adikara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:03:04