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
相关产品推荐
相关产品推荐

