1

我有一個Google Form使用Google電子表格來存儲回覆。在我的電子表格中,我有4列:姓名,電子郵件,收入和第四列Id,用於識別特定收件人。爲每位受訪者生成獨特的表單URL

我想要完成的是爲每個答覆者生成一個唯一的URL,以便他們可以響應表單使用相同的URL在以後編輯表單。

我已經看了這創造了答辯一個唯一的URL的getEditUrl()(谷歌Apps腳本)方法提交以下response--代碼之後:

function myFunction() { 
    assignEditUrls(); 
} 

function assignEditUrls() { 
    var form = FormApp.openById('1vsqvwomoqSXwF6TlNkmmktAAk2av2r-2LRrBYJdv3VQ'); 
    //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++) { 
    var resp = responses[i]; 

    timestamps.push(responses[i].getTimestamp().setMilliseconds(0)); 
    urls.push(shortenUrl(responses[i].getEditResponseUrl())); 
    withItemResponse(responses[i]) 
    } 
    for (var j = 1; j < data.length; j++) { 
    var dop = data[j][0] 

    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 = "AIzaSyBVG4Q5i1mNI0YAO0XVGZ3suZU8etTvK34"; 

    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; 
} 

不過,我想這樣做的另一種方式是首先生成唯一的URL,然後發送給受訪者,以便他們可以提交和編輯他們的回覆,而無需向他們發送另一個URL(例如editurlresponse)。

這可能嗎?

+0

你想知道是誰提交的形式?你看過預填充的url是如何構建的嗎?你可以構造一個「預先填充的」url(一個填充一些或所有字段的url)。例如,您可以構建一個預先填寫的網址,填寫一個作爲提交表單的人的姓名的項目。 –

+0

沒有人回覆。我想爲每個收件人建立一個唯一的網址,以便他們可以使用該網址提交然後重新編輯他們的回覆。 – rararake

+0

此問題已由其他用戶跨Web發佈到Web Apps SE站點:http://webapps.stackexchange.com/q/86396/88163 –

回答

1

最初發佈於https://webapps.stackexchange.com/a/86399/88163


是的,這是可能的,但略有不同的方法:

提交一個答案爲每位受訪者爲了得到他們每個人的一個編輯URL,然後發送每個答覆者的相應URL。

下面是一段代碼片斷,它通過兩個代碼行以編程方式提交響應並記錄一些響應屬性,包括編輯響應url,第一個有問題,第二個是解決方法。請注意,這些線路使用getEditResponseUrl()而不是toPrefilledUrl()

它可以作爲獨立使用或作爲有界腳本使用。

/* 
This code shows how to get the edit response url of a 
programmatically submitted response to a Google Form 
*/ 

// Replace the form ID by your own form 
var formID = '1234567890abcdefghijklmnopqrstuvwxyz'; 

function myFunction() { 
    var form = FormApp.openById(formID); 
    var response = form.createResponse(); 
    var items = form.getItems(); 
    var item = items[0]; 
    if (item.getType() == 'TEXT') { 
    var textItem = item.asTextItem(); 
    var itemResponse = textItem.createResponse('my text'); 
    response.withItemResponse(itemResponse); 
    } 
    // Submit response 
    var submittedResponse = response.submit(); 
    // Get submitted response attributes 
    var values = { 
    ID : submittedResponse.getId(), 
    TS : submittedResponse.getTimestamp(), 
    /* 
    Issue 4476: FormApp: getEditResponseUrl() produces invalid URL 
    https://code.google.com/p/google-apps-script-issues/issues/detail?id=4476 
    */ 
    ER1 : submittedResponse.getEditResponseUrl(), 
    /* Workaround from 
    https://code.google.com/p/google-apps-script-issues/issues/detail?id=4476#c2 
    */ 
    ER2 : submittedResponse.getEditResponseUrl().replace(
     /\?edit2=.*/,"?edit2=" + submittedResponse.getId() 
    ) 
    }; 
    Logger.log(values); 
} 

參考

+0

這不符合OP的要求;雖然會有唯一的網址,但在提交表單時需要重新生成。 – Mogsdad

+0

@Mogsdad:我認爲你把getEditResponseUrl()與toPrefilledUrl()搞混了。代碼使用第一個。 –

+0

你幾乎是正確的,我做了一個不同的錯誤的事情 - 我誤解了getEditResponseUrl()如何工作,認爲它跟蹤了響應的具體值。 – Mogsdad