【问题标题】:Retrieving google form response data检索谷歌表单响应数据
【发布时间】:2018-09-01 06:14:17
【问题描述】:

我有一个谷歌表单,我需要在其中使用项目 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());
        }
    }

【问题讨论】:

    标签: google-apps-script google-forms


    【解决方案1】:

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

    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());
        }
        */
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多