我有一个简单的谷歌表单收集数据,并使用AppScript,发送确认电子邮件到谁填补它的用户。 用户提交表单后,就确认,他/她会看到一个链接编辑他/她的反应。
我想包括一个链接作为确认邮件的一部分(现在,它只能显示在页面上。)我怎样才能获得URL编辑提交的回应?
我能够通过获得链接到表单SpreadsheetApp.getActiveSpreadsheet().getFormUrl()
它给我的格式如下: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>
链接但是不包括编辑键,为用户编辑他/她的反应是必需。 预期URL应该是这样的: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>&edit=<editKey>
我在这里先向您的帮助表示感谢!
-K
编辑:
添加了这个功能请求: http://code.google.com/p/google-apps-script-issues/issues/detail?id=1345&thanks=1345&ts=1337773007
Answer 1:
这是不可能通过@Henrique阿布雷乌答案是真的,直到最近。 谷歌似乎已经添加getEditResponseUrl()
到FormResponse类,并变得可以使用这样的代码来获取编辑网址一堆的存在形态:
function responseURL() {
// Open a form by ID and log the responses to each question.
var form = FormApp.openById('1gJw1MbMKmOYE40Og1ek0cRgtdofguIrAB8KhmB0BYXY'); //this is the ID in the url of your live form
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
Logger.log(formResponse.getEditResponseUrl());
}
}
为了让自动向用户发送电子邮件,因为他们应对一个可以添加上构成触发提交。 由于我工作的情况并不需要人与应用程序登录帐号我没有访问的电子邮件地址会自动所以我有一个问题,文本捕获用户的电子邮件地址。
它询问是否编辑形式是你想要什么的问题。 我一直在努力解决编辑现有的响应或使用发送预充式形式的相对优势toPrefilledUrl()
这样我能看到的东西是如何随时间而改变。 我想这可以归结于跟踪此将为您提供价值。
Answer 2:
如果你正在使用谷歌应用程序的响应者可以编辑有表单回复。
请参阅: 如何编辑表单回应
Answer 3:
这--edit现在可以。 见其他的答案。
用户提交表单后,就确认,他/她会看到一个链接编辑他/她的反应。 我想包括一个链接作为确认邮件的一部分
也就是说不可能的,期限。
这种联系是无法访问的任何地方,没有人可以猜到/构造它。 不过,还有一种可能适合你(这里的一些建议,我会重新短语)一些解决方法,例如,
发送每填充表单链接,让用户重新发送。 你需要有某种控制领域(如用户名),这样你就可以知道并删除/忽略他年长的提交。 可能会自动通过脚本。
您也可以开发和发布的应用程序脚本GUI和发送一个链接到这个Google Apps脚本加上你产生在这里你可以决定你要编辑的条目的参数。 这种方法的下侧是,它是有点麻烦,并矫枉过正重新设计的Google Apps脚本整个窗体。 但同样,它的工作原理。
最后,你可以打开Google Apps脚本“增强请求” 问题跟踪和等待,直到他们和谷歌电子表格/表单团队扎堆开发解决方案。
Answer 4:
这是一个明确的博客文章将告诉您如何做到这一步一步,并解释什么是引擎盖的AppsScripts新手下回事:
http://securitasdato.blogspot.com/2014/11/sending-confirmation-emails-from-google.html
虽然统称你可以从这里提供的所有优秀的答案那里,从该职位脚本的工作最适合我。
Answer 5:
这是否帮助 - 我还没有尝试过,但前一段时间我一直在寻找同样的事情,注意到这一点。
在该页面中https://developers.google.com/apps-script/reference/forms/
从那里代码包含这样的:
Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());
乔恩
Answer 6:
太好了,剧本的作品! 谢谢。
对于新手,像我这样的:就在安德烈的功能代码粘贴SendConfirmationMail(e)
到您的电子表格的代码编辑器,并设置“对表单提交”触发器来运行它。 这是在电子表格中的脚本编辑器,没有形成脚本编辑器。
你需要一些值破解。 阅读代码。 对我来说,令人困惑之一是需要更换********COLUMN SEQUENCE EX 14******
与您希望编辑的网址落得片列数。 我用39是一列超过我的形式使用了。
但是,我得到了这部分运行probs:
for (var i in headers) {
value = e.namedValues[headers[i]].toString();
// Do not send the timestamp and blank fields
if ((i !== "0") && (value !== "")) {
message += headers[i] + ' :: ' + value + "<br>";
}
}
不知道为什么,但我这个替代它:
for (var keys in columns) {
var key = columns[keys];
if ( e.namedValues[key]) {
message += key + ' :: '+ e.namedValues[key] + "<br>";
}
}
我的作品。
Answer 7:
试试这个:(学分不适合我,因为我合并的第三部分的两种解决方案)
来源: 发送确认电子邮件与谷歌表单
/* Send Confirmation Email with Google Forms */
function Initialize() {
var triggers = ScriptApp.getScriptTriggers();
for (var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
ScriptApp.newTrigger("SendConfirmationMail")
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
function SendConfirmationMail(e) {
var form = FormApp.openById('***YOUR FORM CODE***');
//enter form ID here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('***SHEET NAME***');
//Change the sheet name as appropriate
var data = sheet.getDataRange().getValues();
var urlCol = ***************COLUMN SEQUENCE EX 14******; // column number where URL's should be populated; A = 1, B = 2 etc
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [], url;
for (var i = 0; i < responses.length; i++) {
timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
urls.push(responses[i].getEditResponseUrl());
}
for (var j = 1; j < data.length; j++) {
resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
url = resultUrls[i-1]
}
sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);
try {
var ss, cc, sendername, subject, headers;
var message, value, textbody, sender;
// This is your email address and you will be in the CC
cc = Session.getActiveUser().getEmail();
// This will show up as the sender's name
sendername = "****YOUR NAME******";
// Optional but change the following variable
// to have a custom subject for Google Docs emails
subject = "Registro de Oportunidade submetido com sucesso";
// This is the body of the auto-reply
message = "Nós recebemos seu registro de oportunidade.<br>Muito Obrigado!<br><br>";
ss = SpreadsheetApp.getActiveSheet();
headers = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];
// This is the submitter's email address
sender = e.namedValues["********COLUMN NAME OF DESTINATION E-MAIL************"].toString();
for (var i in headers) {
value = e.namedValues[headers[i]].toString();
// Do not send the timestamp and blank fields
if ((i !== "0") && (value !== "")) {
message += headers[i] + ' :: ' + value + "<br>";
}
}
message += "<br>Link to edit" + ' :: ' + url + "<br>";
textbody = message.replace("<br>", "\n");
GmailApp.sendEmail(sender, subject, textbody,
{cc: cc, name: sendername, htmlBody: message});
} catch (e) {
Logger.log(e.toString());
}
}
Answer 8:
你可以尝试来用该电子邮件地址给定值的形式不是删除以前的答案...
这不是一个美丽的方式,但它可以工作...
Answer 9:
我不认为我们有机会获得该值是通过电子表格API(这意味着Google Apps脚本没有它无论是)什么。 我能想到的最接近的将是“关键”值这个饲料 。 你必须进行测试,以找出虽然。 还有,我知道除了直接访问电子表格API没有其他选择。 因此,首先,你必须通过API的使用,以获得最后一行?reverse=true&max-results=1
文章来源: How to add “Edit Response” link to Google Forms emails?