Google apps script 如何加上「;“编辑响应”;链接到谷歌表单电子邮件?

Google apps script 如何加上「;“编辑响应”;链接到谷歌表单电子邮件?,google-apps-script,google-forms,Google Apps Script,Google Forms,我有一个简单的谷歌表单,可以收集数据,并使用AppScript向填写数据的用户发送确认电子邮件。用户提交表单后,在确认后,他/她将看到一个链接来编辑他的/她的响应 我想将该链接作为确认电子邮件的一部分(现在,它只显示在页面上)。我如何获取URL以编辑提交的回复 我可以通过SpreadsheetApp.getActiveSpreadsheet().getFormUrl()获取表单链接。它提供了以下格式:https://docs.google.com/a/domain.com/spreadsheet

我有一个简单的谷歌表单,可以收集数据,并使用AppScript向填写数据的用户发送确认电子邮件。用户提交表单后,在确认后,他/她将看到一个链接来编辑他的/她的响应

我想将该链接作为确认电子邮件的一部分(现在,它只显示在页面上)。我如何获取URL以编辑提交的回复

我可以通过
SpreadsheetApp.getActiveSpreadsheet().getFormUrl()
获取表单链接。它提供了以下格式:
https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=

但是,该链接不包括编辑键,用户编辑其响应时需要该键。预期的URL应如下所示:
https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=&edit=

提前谢谢你的帮助

-K

编辑:


为此添加了一个功能请求:

我认为我们无法通过电子表格API访问该值(这意味着应用程序脚本也没有该值)。我能想到的最接近的是中的“键”值。不过你得测试一下才能知道。据我所知,除了直接访问电子表格API之外,没有其他选择。因此,首先,您必须通过api获取最后一行使用
?reverse=true&max results=1

您可以尝试使用该电子邮件地址提供的值填充表单,而不是删除以前的答案


这不是一个很好的方法,但它可以工作…

如果你使用谷歌应用,你的回复者可以编辑那里的表单回复

请参阅:

——编辑现在可以进行此操作。请参阅其他答案。

用户提交表单后,在确认后,他/她将看到指向的链接 编辑他/她的回答。我想将该链接作为确认电子邮件的一部分

这是不可能的

该链接在任何地方都无法访问,人们无法猜测/构建它。但是,有一些变通方法可能适合您(这里有人建议我重新使用这个短语),例如

发送每个填充的表单链接,并让用户重新发送。你需要有一些控制字段(例如用户名),这样你就可以知道并删除/忽略他的旧提交。可能通过脚本自动执行

您还可以开发和发布应用程序脚本GUI,并发送指向此应用程序脚本的链接以及生成的参数,以便确定应编辑的条目。这种方法的缺点是,在应用程序脚本上重新设计整个表单有点麻烦和过分。但同样,它是有效的


最后,你可以在应用程序脚本上打开一个“增强请求”,等待他们和谷歌电子表格/表单团队一起开发一个解决方案。

这有帮助吗?我没有尝试过,但我之前也在寻找同样的东西,并注意到了这一点

从本页

其中的代码包含以下内容:

Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());
Jon

试试这个:(学分不适合我,因为我合并了第三部分的两个解决方案)

资料来源:

/*使用谷歌表单发送确认电子邮件*/
函数初始化(){
var triggers=ScriptApp.getScriptTriggers();
for(触发器中的var i){
ScriptApp.deleteTrigger(触发器[i]);
}
ScriptApp.newTrigger(“发送确认邮件”)
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
功能SendConfirmationMail(电子邮件){
var form=FormApp.openById('***您的表单代码***');
//在此处输入表单ID
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“***工作表名称***”);
//根据需要更改图纸名称
var data=sheet.getDataRange().getValues();
var urlCol=*************列序列ex14******;//应填充URL的列编号;A=1,B=2等
var responses=form.getResponses();
var时间戳=[],url=[],结果url=[],url;
对于(var i=0;iMuito Obrigado!

”; ss=电子表格app.getActiveSheet(); headers=ss.getRange(1,1,1,ss.getLastColumn()).getValues()[0]; //这是提交者的电子邮件地址 sender=e.namedValues[“*********目标电子邮件的列名**********”].toString(); for(标题中的变量i){ value=e.namedValues[headers[i]].toString(); //不要发送时间戳和空白字段 如果((i!=“0”)&&(值!=“0”){ 消息+=头[i]+':'+值+“
”; } } 消息+=“
链接到编辑“+”:“+url+”
”; textbody=message.replace(“
”,“\n”); GmailApp.sendmail(发件人、主题、正文、, {cc:cc,name:sendername,htmlBody:message}); }捕获(e){ Logger.log(例如toString()); } }
答案是
/* 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());
    }

}
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());
 }
}
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>"; 
        } 
    }