Google apps script 谷歌表单url指向上次更新的答案
我已经创建了一个谷歌表单,其中有一个与之相关联的谷歌电子表格,我发送给的每个收件人都可以访问(使用该表单)。现在,URL对于每个收件人来说都不是唯一的。收件人可以访问表单,然后提交表单。提交后,我将通过GoogleFormResponse类中可用的函数生成一个编辑URL。然后,收件人可以在提交表单后使用我提供的编辑url编辑他们的回复 这是我的密码:Google apps script 谷歌表单url指向上次更新的答案,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我已经创建了一个谷歌表单,其中有一个与之相关联的谷歌电子表格,我发送给的每个收件人都可以访问(使用该表单)。现在,URL对于每个收件人来说都不是唯一的。收件人可以访问表单,然后提交表单。提交后,我将通过GoogleFormResponse类中可用的函数生成一个编辑URL。然后,收件人可以在提交表单后使用我提供的编辑url编辑他们的回复 这是我的密码: 函数myFunction(){ assigneditURL(); } 函数assignEditUrls(){ var form=FormApp.o
函数myFunction(){
assigneditURL();
}
函数assignEditUrls(){
var form=FormApp.openById('formId');
//在此处输入表单ID
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');
//根据需要更改图纸名称
var data=sheet.getDataRange().getValues();
var urlCol=5;//应该填充URL的列号;A=1,B=2等
var responses=form.getResponses();
var时间戳=[]、URL=[]、结果URL=[];
对于(var i=0;i
您还可以查看与表单关联的
这个模型的问题是,收件人需要返回一个经过编辑的URL,以便在以后编辑他们的响应。相反,我希望他们保留我最初提供给他们的相同URL,每次他们返回该URL时,我应该确定它是哪个收件人,并用最后更新的URL重定向他们
要实现这种情况,我需要:
1。为每个收件人创建唯一的URL(标识符)
2。相同的URL应指向上次更新的URL(表单),以便它们始终可以使用最初提供的相同URL(后端进程)
使用谷歌的可用工具可以实现这一点吗?如果是,我如何创建一个唯一的url来标识哪个收件人对表单做出了响应?在Google Apps脚本的范围内,您不能提供到Google表单的重定向 以下是我脑海中的两个想法
- 如果您愿意使用其他服务来处理重定向,您可以让它为您执行重定向。(我不推荐,只是说这是一种选择。)
- 你可以编写一个GoogleApps脚本web服务来展示你真实的表单模型。用户将有一个唯一的URL作为HTTP查询参数传递其唯一标识符;见鬼,你可以像现在一样使用
为它们生成一个简短的URL。根据标识符,用最后的结果预填充假表单。提交后,web服务可以通过编程方式提交表单goo.gl
假设您要为每个用户创建一个单独的表单,请尝试在提交第一个响应后将编辑URL放回每个表单的说明或第一页的某个位置。你必须清楚地表明,他们必须继续点击该链接。如果这是您的要求,则没有设置自动将原始Google表单URL重新定向到相应的编辑响应URL 我喜欢第二个主意。基本上,我会为每个收件人生成一个唯一的url。当他们提交表格时,我将在电子表格中填写他们的答案。现在,当他们再次访问同一个url时,我将对照我的电子表格进行检查,确定url,并在其前面填充他们之前响应的内容,以便他们可以使用我最初提供给他们的相同url查看上次的答案。所以,基本上每次他们访问url时,我都会用他们之前提交的内容预先填充表单。这个逻辑正确吗?就是这样-听起来可行。确实如此:)。您是否知道如何为每个将填写调查的收件人生成唯一的表单url?现在,所有收件人的url都是完全相同的,我需要一些独特的东西来识别响应者。你知道怎么做吗?唯一的URL将用于web app+查询参数,而不是Google表单。这是一种不用谷歌表单就能完成所有工作的方法,在新表单中已经过时,但有一些有用的想法。演示如何获取现有响应以构建预填充的URL(您可以调整它以显示当前响应并提交更新)。太棒了!我看过你的密码了。我很难在这件事上动脑。。。我需要一种在收件人第一次打开表单时创建唯一id的方法,这样即使在提交表单之前,也已经有一个唯一id来区分收件人表单。这样,下次他们点击链接并编辑他们的回复时,我可以对照我的电子表格检查,确定是哪个收件人,并给他最后更新的答案。这是一个解决方案。缺点是我需要创建~5000个表单。如果这是针对用户的
function myFunction() {
assignEditUrls();
}
function assignEditUrls() {
var form = FormApp.openById('formId');
//enter form ID here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');
//Change the sheet name as appropriate
var data = sheet.getDataRange().getValues();
var urlCol = 5; // column number where URL's should be populated; A = 1, B = 2 etc
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [];
for (var i = 0; i < responses.length; i++) {
timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
urls.push(shortenUrl(responses[i].getEditResponseUrl()));
}
for (var j = 1; j < data.length; j++) {
resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
}
sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);
}
function shortenUrl(longUrl) {
// google url shortener api key
var key = "apiKey";
var serviceUrl="https://www.googleapis.com/urlshortener/v1/url?key="+key;
var options={
muteHttpExceptions:true,
method:"post",
contentType: "application/json",
payload : JSON.stringify({'longUrl': longUrl })
};
var response=UrlFetchApp.fetch(serviceUrl, options);
if(response.getResponseCode() == 200) {
var content = JSON.parse(response.getContentText());
if ( (content != null) && (content["id"] != null) )
return content["id"];
}
return longUrl;
}