基于Google Apps Script实现从Google Sheets自动生成Google Form简答题的技术咨询
基于Google Apps Script实现从Google Sheets自动生成Google Form简答题的技术咨询
当然可以实现!用Google Apps Script就能完美解决你每次手动更新表单的麻烦,下面是一步步的实操方案,亲测好用:
一、先规整你的Google Sheet结构
首先确保商品列表格式清晰:
- 建议单独用一个工作表(比如命名为「在售商品」)存放商品信息
- A列作为商品名称列,第一行设为表头(比如「商品名称」),从第2行开始填写具体商品名,尽量不要留空行(脚本会自动跳过偶尔出现的空行)
二、编写Google Apps Script代码
- 打开你的Google Form,点击顶部菜单的「扩展程序」→「Apps Script」,进入脚本编辑器
- 清空默认的示例代码,粘贴下面的脚本(记得替换里面的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自动同步,需要配置触发器:
- 在脚本编辑器左侧点击「触发器」图标(时钟样式)
- 点击「添加触发器」,按以下配置:
- 选择要运行的函数:
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
相关产品推荐
相关产品推荐

