基于Google Apps Script实现Google Forms随机分配对照组与处理组问卷的技术问询
实现Google Forms随机分配对照组/处理组问卷的完整方案
嘿,我刚好有过用Google Apps Script实现问卷随机分配的经验,完美匹配你的毕业论文需求!下面是从代码到部署的全流程解决方案,你可以直接照搬使用:
第一步:准备两份目标问卷
- 先把你的对照组和处理组问卷在Google Forms中创建完成,确保它们都设置为允许任何人填写(在表单「设置」→「回复」选项卡下,关闭所有「限制回复」的相关设置)
- 分别复制两份表单的填写链接(打开表单后,地址栏的URL,格式为
https://docs.google.com/forms/d/e/XXX/viewform)
第二步:编写Google Apps Script代码
- 打开任意一个Google表单(或者新建一个空表单当临时载体)
- 点击顶部菜单栏的「扩展程序」→「Apps Script」,进入脚本编辑器
- 清空默认的
myFunction()代码,替换成下面的完整脚本:
function randomAssignQuestionnaire() { // 👇 替换成你自己的对照组和处理组表单链接 const controlGroupUrl = "https://docs.google.com/forms/d/e/你的对照组表单ID/viewform"; const treatmentGroupUrl = "https://docs.google.com/forms/d/e/你的处理组表单ID/viewform"; // 生成0或1的随机数,实现50%概率分配 const randomResult = Math.floor(Math.random() * 2); // 带过渡提示的跳转逻辑,提升参与者体验 if (randomResult === 0) { return HtmlService.createHtmlOutput(` <div style="text-align:center; margin-top:50px; font-size:18px;"> 正在为您分配问卷,请稍候... </div> <script>setTimeout(() => window.location.href="${controlGroupUrl}", 1000);</script> `); } else { return HtmlService.createHtmlOutput(` <div style="text-align:center; margin-top:50px; font-size:18px;"> 正在为您分配问卷,请稍候... </div> <script>setTimeout(() => window.location.href="${treatmentGroupUrl}", 1000);</script> `); } } // Web应用的入口函数,必须命名为doGet function doGet() { return randomAssignQuestionnaire(); }
第三步:部署为可公开访问的Web应用
- 在脚本编辑器右上角,点击「部署」→「新部署」
- 点击「类型」下拉菜单,选择「Web应用」
- 配置部署选项:
- 执行:选择「我」(使用你的Google账号权限执行脚本)
- 谁可以访问:选择「任何人,甚至匿名」(确保参与者无需登录即可访问)
- 点击「部署」,按照提示完成权限授权(第一次部署可能会提示“不安全的应用”,点击「高级」→「转到[你的脚本名称](不安全)」即可继续授权)
- 部署完成后,会得到一个类似
https://script.google.com/macros/s/XXX/exec的URL,这个就是你要发给所有参与者的随机分配入口链接
可选调整:自定义分配概率
如果你不想用50/50的分配比例,比如想让60%的参与者进入处理组,可以修改随机数判断逻辑:
// 替换原来的randomResult判断部分 const randomProb = Math.random(); if (randomProb < 0.6) { // 60%概率跳转到处理组 return HtmlService.createHtmlOutput(` <div style="text-align:center; margin-top:50px; font-size:18px;"> 正在为您分配问卷,请稍候... </div> <script>setTimeout(() => window.location.href="${treatmentGroupUrl}", 1000);</script> `); } else { // 40%概率跳转到对照组 return HtmlService.createHtmlOutput(` <div style="text-align:center; margin-top:50px; font-size:18px;"> 正在为您分配问卷,请稍候... </div> <script>setTimeout(() => window.location.href="${controlGroupUrl}", 1000);</script> `); }
内容的提问来源于stack exchange,提问作者TizianPro
相关产品推荐
相关产品推荐

