正在检索 google 表单响应数据

Retrieving google form response data

我有一个 google 表单,我需要在其中使用商品 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());
    }
    */
  }
}