Как получить строковый массив string [] с проверенными параметрами checkboxItem в Google Forms через Apps Script? - PullRequest
0 голосов
/ 07 октября 2019

Как сказано в Класс ItemResponse

Для вопросов CheckboxItem это возвращает массив String [], содержащий варианты ответов респондента. Порядок строк в массиве может варьироваться.

У меня есть функция, которая импортирует ответы из Google Form. В нем есть различные пункты, некоторые из них чекбокс, некоторые абзацы. Эти ответы устанавливаются в электронной таблице.

Проблема с функцией заключается в том, что для элементов, для которых установлены флажки (доступно несколько проверок), импортируется только один проверенный ответ, и мне нужны все они.

Поэтому я попробовал следующий код, но ответ ver не является массивом, как говорится на сайте разработчиков, или я ошибаюсь:

function leer() 
{
  //Definições iniciais da planilha
  var spreadsheet = SpreadsheetApp.getActive(); 
  
  var DB = SpreadsheetApp.getActive().getSheetByName("REPXT").getRange("A2:D");
  var datos = SpreadsheetApp.getActive().getSheetByName("REPXT").getRange("A2:D500").getValues();
  
  var base = SpreadsheetApp.getActive().getSheetByName("Base de datos REPXT");
  
    //Obter dados do formulário
  for(var i=0;i<SpreadsheetApp.getActive().getSheetByName("REPXT").getMaxRows() +1; i++)
  {
    if(datos[i][3]!="Importado"&&datos[i][2]!=""){
    
      var idg= datos[i][2]
      
    var form = FormApp.openById(idg);
    var formResponses = form.getResponses();
          
    var quant_resp = formResponses.length;
    
    
      //Buscar todas las respuestas
      for( var j = 0; j < quant_resp ; j++ )
      {
        //Obter dados do formulário
        var linhaform = formResponses[j];
        var linharesponses = linhaform.getItemResponses();      
        //Inserir no BANCO R2 - NOMBRE - e na aba AUX_LEER
        var inicio=   base.getLastRow() + 1 ;   
        
        base.getRange(inicio, 2).setValue(datos[i][0]);

          var l=3;
        
        for (var k=0;k<linharesponses.length;k++){  
          
          var itemResponse = linharesponses[k];
          
          base.getRange(inicio, l).setValue(linharesponses[k].getItem().getTitle()); 
          
          if(itemResponse.getItem().getType()== FormApp.ItemType.CHECKBOX){
           var response = itemResponse.getResponse();
           
           for (var m = 0; m < response; ++m) {
            
             
            base.getRange(inicio, l+m+1).setValue(response[m]);
             
           }
            l=l+1+chkItem.getChoices().length;
          }
          else  { base.getRange(inicio, l+1).setValue(linharesponses[k].getResponse());
                l=l+2;
                }
          
          
        }
        SpreadsheetApp.getActive().getSheetByName("REPXT").getRange(i+2,4).setValue("Importado");
      }
    }
  }
}

Можете ли вы помочь мне получить все опции, отмеченные на checkboxItem?

Заранее спасибо.

1 Ответ

1 голос
/ 08 октября 2019

Как простая модификация, если ваш скрипт изменен, как насчет этой модификации?

Точки модификации:

  • chkItem из l=l+1+chkItem.getChoices().length; не объявлено. Поэтому я думаю, что в этой строке происходит ошибка.
  • В цикле for непосредственно используется массив. Поэтому, пожалуйста, замените response на response.length.
    • Я подумал, что это может быть причиной вашей проблемы.

Изменен сценарий:

От:
for (var m = 0; m < response; ++m) {


  base.getRange(inicio, l+m+1).setValue(response[m]);

 }
  l=l+1+chkItem.getChoices().length;
До:
for (var m = 0; m < response.length; ++m) { // Modified
  base.getRange(inicio, l+m+1).setValue(response[m]);
}
l=l+1+response.length; // Modified

Если я неправильно понял вашу ситуацию, а это не тот результат, которого вы хотите, прошу прощения.

...