代码之家  ›  专栏  ›  技术社区  ›  Code Guy

检索google表单响应数据

  •  1
  • Code Guy  · 技术社区  · 6 年前

    我有下面的脚本,如果窗体有超过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());
            }
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Alan Wells    6 年前

    当前,您的代码通过以下行获取item对象:

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

    所以,这行代码多次读取表单。 您可以尝试获取item对象一次,将它们放入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());
        }
        */
      }
    }