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

Google Forms脚本异常:确认页返回上一位受访者的唯一ID

问题:Google Forms脚本确认页显示上一位受访者的唯一ID

我编写了一个Google Forms脚本,目的是让受访者保持匿名的同时记录参与情况。脚本会为每位受访者生成唯一ID并写入Spreadsheet,在受访者点击提交(脚本触发条件)时,在确认页展示该ID。目前的问题是:ID能正确写入表格,但确认页显示的是上一位受访者的ID。想问是变量randomUnique未重置,还是读取了表格中的旧对象?

代码如下:

function setUniqueId(e) {
  var ss = SpreadsheetApp.openById('1n_SPREADSHEETCODEHERE_ek');
  var sheet = ss.getSheetByName('Form Responses 1');

  var row = sheet.getLastRow();
  var randomUnique = `CLASS_MODEL-${Math.random().toString(32).slice(2, 8)}`

  var form = FormApp.openById("18_FORMCODEHERE_78")
  var message = `Hello, this is a check for completion. Your unique ID is ${randomUnique}. 
    Please print this paper and bring it to your instructor if required for class.`

  form.setConfirmationMessage(message) //present unique id to respondent
  sheet.getRange(row, 2).setValue(randomUnique) //logs to the spreadsheet
}

[表格和表单ID已脱敏处理]


问题原因及解决方案

问题根源

不是randomUnique没重置,也不是读取了表格旧对象——问题出在Google Forms的确认消息是全局设置。你现在的逻辑是:用户提交→触发脚本→生成ID→修改全局确认消息→写入表格。但用户点击提交后,确认页已经开始加载,此时脚本修改的确认消息是给下一位用户准备的,当前用户看到的还是修改前的旧消息(也就是上一位用户的ID)。

解决方案:改用提交后重定向到专属页面(推荐)

Google Forms自带的确认消息无法为单个用户动态生成内容,必须用“提交后重定向”的方式,让用户跳转到一个能显示专属ID的页面。具体步骤如下:

1. 修改原脚本,设置重定向地址

function setUniqueId(e) {
  var ss = SpreadsheetApp.openById('1n_SPREADSHEETCODEHERE_ek');
  var sheet = ss.getSheetByName('Form Responses 1');
  var row = sheet.getLastRow();
  var randomUnique = `CLASS_MODEL-${Math.random().toString(32).slice(2, 8)}`;

  // 先把ID写入表格
  sheet.getRange(row, 2).setValue(randomUnique);

  // 替换成你即将部署的网页应用URL
  var webAppUrl = "https://script.google.com/macros/s/你的网页应用部署ID/exec";
  // 把ID作为参数拼接到URL里
  var redirectUrl = `${webAppUrl}?id=${randomUnique}`;
  
  var form = FormApp.openById("18_FORMCODEHERE_78");
  // 设置提交后跳转到专属页面,替代全局确认消息
  form.setDestination(FormApp.DestinationType.REDIRECT, redirectUrl);
}

2. 添加网页应用的显示函数

在同一个脚本文件里添加以下函数,用于生成显示ID的页面:

function doGet(e) {
  var userUniqueId = e.parameter.id;
  var pageContent = `<html>
                      <body style="font-family: Arial; max-width: 600px; margin: 2rem auto; padding: 0 1rem;">
                        <h2>提交成功</h2>
                        <p>您好,这是您的参与凭证:</p>
                        <p style="font-size: 1.2rem; font-weight: bold; color: #2c3e50;">您的唯一ID:${userUniqueId}</p>
                        <p>若课程要求,请打印此页面并交给授课老师。</p>
                      </body>
                    </html>`;
  return HtmlService.createHtmlOutput(pageContent);
}

3. 部署网页应用

  • 在脚本编辑器右上角点击「部署」→「新部署」
  • 类型选择「网页应用」
  • 执行权限选「我」,谁可以访问选「任何人,甚至匿名用户」
  • 点击部署,复制生成的网页应用URL,替换到上面脚本里的webAppUrl变量

这样用户提交表单后,会直接跳转到显示自己专属ID的页面,不会再和其他用户的ID混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:23:13