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

如何通过Google Apps Script实现Google Form每次打开随机加载5个问题且避免中途变更?

解决Google Form随机问题不干扰正在填写用户的方案

核心问题在于定时修改原表单会影响已加载页面的用户,所以得彻底换掉定时更新的思路,改为给每个访问者生成专属的临时表单,具体步骤如下:

1. 准备工作

  • 整理好你的问题电子表格,确保每行是一个问题(如果是选择题,第一列放问题文本,后续列放对应选项)
  • 创建一个空白Google Form作为模板(无需添加任何问题,脚本会动态生成)

2. 编写Web App脚本

打开Google Apps Script编辑器,替换成以下代码:

function doGet(e) {
  // 替换成你的电子表格ID和问题所在工作表名称
  const ssId = "你的电子表格ID";
  const questionSheetName = "问题表";
  
  // 读取所有问题数据,跳过表头行
  const ss = SpreadsheetApp.openById(ssId);
  const sheet = ss.getSheetByName(questionSheetName);
  const allQuestions = sheet.getDataRange().getValues().slice(1);
  
  // 随机打乱问题列表并选取5个
  const shuffledQuestions = allQuestions.sort(() => Math.random() - 0.5);
  const selected5 = shuffledQuestions.slice(0, 5);
  
  // 替换成你的模板表单ID
  const templateFormId = "你的模板表单ID";
  // 复制模板生成临时表单,用时间戳命名避免重复
  const tempForm = FormApp.openById(templateFormId).copy(`临时问卷_${Date.now()}`);
  
  // 清空模板里的默认内容(如果有)
  tempForm.getItems().forEach(item => tempForm.deleteItem(item));
  
  // 把选中的问题添加到临时表单(这里以选择题为例,其他类型自行调整)
  selected5.forEach(q => {
    const mcItem = tempForm.addMultipleChoiceItem();
    mcItem.setTitle(q[0]);
    // 生成选项:过滤空值后转换为表单选项格式
    const choices = q.slice(1).filter(opt => opt).map(opt => FormApp.createChoice(opt));
    mcItem.setChoices(choices);
  });
  
  // 设置临时表单的响应提交到原电子表格(可选,也可指定新表格)
  tempForm.setDestination(FormApp.DestinationType.SPREADSHEET, ssId);
  
  // 自动跳转到生成的临时表单
  return HtmlService.createHtmlOutput(`<script>window.location.href="${tempForm.getPublishedUrl()}";</script>`);
}

// 定时清理旧的临时表单,避免占用Drive存储空间
function cleanExpiredForms() {
  const templateFormId = "你的模板表单ID";
  const cutoffDate = new Date();
  cutoffDate.setDate(cutoffDate.getDate() - 1); // 清理1天前的临时表单
  
  const formFiles = DriveApp.getFilesByType(MimeType.GOOGLE_FORMS);
  while (formFiles.hasNext()) {
    const file = formFiles.next();
    // 判断是否是我们生成的临时表单且已过期
    if (file.getName().startsWith("临时问卷_") && file.getDateCreated() < cutoffDate) {
      file.setTrashed(true);
    }
  }
}

3. 部署Web App

  • 点击编辑器右上角「部署」→「新部署」
  • 类型选择「Web应用」
  • 执行权限选「我」,访问权限选「任何人,甚至匿名用户」
  • 点击部署,复制生成的Web App链接,这就是给受访者的访问入口

4. 设置定时清理触发器

  • 点击编辑器左侧「触发器」图标
  • 添加触发器:选择cleanExpiredForms函数,事件源选「时间驱动」,类型选「每天」,设置合适的执行时间(比如凌晨)

关键说明

  • 每个访问者打开Web App链接时,都会生成独立的临时表单,彼此完全隔离,不会出现正在填写时问题被修改的情况
  • 临时表单会被定时清理,不会占用过多Drive空间
  • 如果你的问题是短答案、判断题等类型,只需修改脚本中添加问题的部分(比如用addTextItem()代替addMultipleChoiceItem())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:15:25