Получение данных ответа формы Google - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть форма Google, где мне нужно использовать идентификатор элемента и получить все ответы для этого элемента.

У меня есть скрипт ниже, который прервет работу, если форма имеет более 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 Ответ

0 голосов
/ 01 сентября 2018

В настоящее время ваш код получает объект 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());
    }
    */
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...