检索谷歌表单响应数据



我有一个谷歌表单,我需要在其中使用项目 ID 并获取该项目的所有响应。

我有下面的脚本,如果表单有超过 3000 个响应,它将超时,因为它效率低下

如何优化它以在短时间内检索所有项目

fO.items = ["ItemID1","ItemID2","ItemID3"...];
for (var i = 0; i < responses.length; i++) {
var response = responses[i];
var otherItems = '';
var flag = true;
for (var j = 0; j < fO.items.length; j++) {
var item = form.getItemById(parseInt(fO.items[j]));
if (response.getResponseForItem(item))
var otherItems = otherItems + "t" + response.getResponseForItem(item).getResponse();
else
flag = false;
}
if (flag) {
columnData.push(otherItems);
responseIds.push(response.getId());
}
}

目前,您的代码正在获取具有以下行的项对象:

var item = form.getItemById(parseInt(fO.items[j]));

因此,这行代码正在多次读取表单。 您可以尝试获取项目对象一次,将它们放入 JSON 对象中,然后根据需要检索它们。

我还没有测试过这段代码,我不知道它是否会起作用,或者如果它确实有效,它是否会更快。 但我想我会分享这个想法。

function getSomeAnswers() {
var form,flag,i,item,itemID,itemList,itemsObject,
k,L,L_items,otherItems,responses,response,thisAnswer;
itemList = ["ItemID1","ItemID2","ItemID3"];
form = FormApp.getActiveForm();
responses = FormApp.getActiveForm().getResponses();
itemsObject = {};
L_items = itemList.length;
for (i = 0; i < L; i++) {//Compile a list of item objects
itemID = parseInt(itemList[i]);
itemsObject[itemID] = form.getItemById(itemID);
}
L = responses.length;
for (i = 0; i < L; i++) {
response = responses[i];
otherItems = '';
flag = true;     
for (k in itemsObject) {//Loop through every item to get
item = itemsObject[k];
thisAnswer = response.getResponseForItem(item);
Logger.log(thisAnswer)
if (thisAnswer)
otherItems = otherItems + "t" + response.getResponseForItem(item).getResponse();
else
flag = false;
}
/*
if (flag) {
columnData.push(otherItems);
responseIds.push(response.getId());
}
*/
}
}

最新更新