【发布时间】:2016-02-22 03:18:36
【问题描述】:
我有一个 Google 表单和一个 Google Spreadsheet。
timestamp | name | email | revenue | Edit Url
2015-2-2 02:22:22 | David | | |
2015-2-2 07:22:22 | Paul | | |
2015-2-2 09:22:22 | Olive | | |
我想要完成的事情:
- 根据电子表格中的信息(姓名、电子邮件、收入),我想以编程方式遍历每一行,根据每行中的信息填充表单,然后提交表单并为提交的每个表单生成一个编辑将存储在 Edit Url 列中的 URL。
到目前为止,这是我的 Google 应用脚本:
function myFunction() {
createSurveyResponses();
}
function createSurveyResponses() {
// Open a form by ID and add a new text item.
var form = FormApp.openById('form_id');
var response = form.createResponse();
var sheet = SpreadsheetApp.openById('spreadsheet_id');
var getAct = sheet.getActiveSheet();
var data = sheet.getDataRange().getValues();
// Access the text item as a generic item.
var items = form.getItems();
var item = items[0];
var urls = [];
var resultUrls = [];
for (var j = 1; j < data.length; j++) {
var dop = data[j][0]
if (item.getType() == 'TEXT') {
var textItem = item.asTextItem();
var itemResponse = textItem.createResponse(data[j][0]);
var another = response.withItemResponse(itemResponse);
response.submit();
}
}
// get the responses from the spreadsheet
var fresponses = form.getResponses();
for (var i = 0; i < fresponses.length; i++) {
var resp = [fresponses[i]];
urls.push([shortenUrl(fresponses[i].getEditResponseUrl())]);
}
var getdata = getAct.getRange(2,5,fresponses.length)
getdata.setValues(urls);
}
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;
}
但是,当我运行代码时,在第一次迭代(第一行)之后,我收到一个错误 Sorry, this response has already been submitted. (line 34, file ""),这是我提交响应 response.submit(); 的时候。
我做错了什么?
我的最终目标是为每一行生成一个唯一的 URL,以便我的收件人可以使用该 URL 随时更新他们的回复 (getEditResponseUrl())。
【问题讨论】:
-
请看我更新的答案。它可以满足您的一切需求。
标签: google-apps-script google-sheets google-forms