如何在Google Apps Script中获取Google Forms当前提交响应的URL
实现方案
核心原理
Google Forms 没有内置直接返回单个响应链接的API,可通过固定规则拼接得到编辑者可访问的响应定位链接:
链接结构为 [表单编辑链接]/edit#response=[响应唯一ID]
修改后的完整代码
function onSubmit(e) { var form = FormApp.getActiveForm(); // 优先从触发事件对象拿当前提交的响应,避免高并发场景下取错 var latestResponse = e.response || form.getResponses()[form.getResponses().length - 1]; // 拼接响应链接 var formBaseUrl = form.getEditUrl().replace(/\/edit$/, ''); var responseLink = `${formBaseUrl}/edit#response=${latestResponse.getId()}`; var response = latestResponse.getItemResponses(); var answerarray = []; var questionarray = []; for (var i = 0; i < response.length; i++) { var question = response[i].getItem().getTitle(); var answer = response[i].getResponse(); try { var parts = answer.match(/[\s\S]{1,1024}/g) || []; } catch (e) { var parts = answer; } if (answer == "") { continue; } for (var j = 0; j < parts.length; j++) { answerarray.push(parts[j]); questionarray.push(question); } } // 后续可以把responseLink放到推送给Discord的内容里使用 }
注意事项
- 拼接得到的
responseLink仅表单的协作者/编辑者可以访问,点击后会直接跳转定位到对应提交的响应详情页 - 优先使用
e.response获取当前提交的响应,比遍历所有响应取最后一个的方案更稳定,可避免多人同时提交时出现响应匹配错误的问题 - 如果需要普通用户可访问的响应公开链接,目前Google Forms没有提供官方的生成路径
内容的提问来源于stack exchange,提问作者moladori
相关产品推荐
相关产品推荐

