Создавайте вопросы формы в соответствии с ответом в Google Apps Script

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

Список имен и связанные страны сохраняются в электронной таблице. Я использую этот список для заполнения ListItem для имен и списка стран ListItem для каждого коллеги.

На данный момент у меня есть приветственная страница с двумя ListItems: Name и Product. После выбора имени и нажатия на «Продолжить» форма переходит на соответствующую страницу, где список стран уже предварительно заполнен странами.

Моя проблема в том, что таким образом у меня всегда получается действительно длинная форма, хотя пользователь видит только две страницы. Кроме того, на заданном листе есть отдельный столбец для каждого вопроса.

Можно ли сгенерировать вторую страницу «на лету» на основе выбранного имени?

ОБНОВИТЬ:

Это мое творение из функции. Было бы неплохо создать блок questionBlock «по запросу», передав выбранное имя или, по крайней мере, установить сгенерированные вопросы, чтобы сохранить ответ в том же столбце электронной таблицы.

function createForm() {

  //Names
  var Names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'];
  var fullNames = ['Mr. Z A', 'Mr. Y B', 'Mr. X C', 'Ms. W D', 'Mr. V E', 'Ms. U F', 'Mr. T G', 'Mr. S H', 'Mr. R I', 'Mr. Q J'];
  var Products = ['Product 1', 'Product 2'];
  var questionBlock = {};

  var form = FormApp.create('Vertriebsländer und Zulassungsplan 2015');

  //Page 1
  form.setTitle('formTitle')
  .setDescription('Please fill out the following survey.');
  form.hasRespondAgainLink();
  form.canEditResponse();

  var lName = form.addListItem()
  .setTitle('Please choose your name:')
  .setRequired(true);

  var choicesName = lName.getChoices();
  choicesName = [];

  var lProduct = form.addListItem()
  .setChoiceValues(Products)
  .setTitle('Please choose the product:')
  .setRequired(true);

//Question Block Page
  for( a = 0; a < Names.length; a++){
      choicesName.push(
        lName.createChoice(fullNames[a],
                       form.addPageBreakItem()
                       .setTitle('Welcome ' + fullNames[a] +'!')
                       .setGoToPage(FormApp.PageNavigationType.SUBMIT)));

questionBlock[ ('lCountries' + Names[a]) ] = form.addListItem();
   questionBlock[ ('lCountries' + Names[a]) ].setTitle('Please choose a country:');
   questionBlock[ ('lCountries' + Names[a]) ].setRequired(true);

questionBlock[('txtQuestion1')] = form.addTextItem();
   questionBlock[('txtQuestion1')].setTitle('Common Question 1');
   questionBlock[('txtQuestion1')].setRequired(true);

questionBlock[('lQuestion2')] = form.addListItem();
   questionBlock[('lQuestion2')].setTitle('Question2');
   questionBlock[('lQuestion2')].setChoiceValues(['A', 'B', 'C']);
   questionBlock[('lQuestion2')].setRequired(true);

questionBlock[('lQuestion3')] = form.addListItem();
   questionBlock[('lQuestion3')].setTitle('Question3');
   questionBlock[('lQuestion3')].setChoiceValues(['A', 'B', 'C', 'D']);
   questionBlock[('lQuestion3')].setRequired(true);

questionBlock[('txtQuestion4')] = form.addTextItem();
   questionBlock[('txtQuestion4')].setTitle('Do you have any remarks?');
   questionBlock[('txtQuestion4')].setRequired(false);
  }

  lName.setChoices(choicesName);

  //Fill country selection dropdown==================

  //Spreadsheet
  var ssCountries = SpreadsheetApp.openById('abcdefghijklmnopqrstuvwxyz1234567890');
  //Importing data from spreadsheet
  var dataRange = ssCountries.getDataRange(); 
  var values = dataRange.getValues();


  for (i = 0; i < Names.length; i++)
  {
    choices = questionBlock[ ('lCountries' + Names[i]) ].getChoices();
    choices = [];
    for (j = 0; j < values[0].length; j++)
   {
      var curr_name = values[0][j];
     if (curr_name == Names[i])
      {
        for (k = 1; k < values.length; k++)
        {
          if (values[k][j].toString().length > 0)
          {          
            choices.push(questionBlock[ ('lCountries' + Names[i]) ].createChoice(values[k][j]));
            questionBlock[ ('lCountries' + Names[i]) ].setChoices(choices);
          }
        }
      }
    }
  }
  //Country selection dropdown filled==================
}

person Peter Benkö    schedule 15.01.2015    source источник
comment
Пожалуйста, опубликуйте код, над которым вы работали.   -  person KRR    schedule 15.01.2015
comment
Я отредактировал первоначальный квест, включив в него исходный код. Я думаю об использовании getItemResponds, но я не мог понять, как его отлаживать, поскольку он всегда пуст во время отладки. (Но, может быть, я просто не понимаю всей этой штуки с getResponses)   -  person Peter Benkö    schedule 17.01.2015


Ответы (1)


Я не думаю, что вы можете редактировать текущую открытую форму, а также отображать или скрывать вопросы. Конечно, вы можете сделать это в HTML, но я не думаю, что вы можете сделать это в Google Form. Вы можете редактировать текущую форму из кода, но тогда вам нужно будет сохранить ее, закрыть форму и, как я полагаю, попросить пользователя повторно открыть ее.

Согласно документации, у вас может быть боковая панель для формы.

Документация Google - настраиваемая боковая панель

Таким образом, вы можете отображать настраиваемую боковую панель и отображать или скрывать поля с помощью HTML в зависимости от ответа пользователя. Итак, я предлагаю, чтобы у вас не было настраиваемой второй страницы в вашей форме, у вас была бы настраиваемая боковая панель, которая динамически изменяется в зависимости от ввода пользователя.

person Alan Wells    schedule 15.01.2015