У меня есть формы 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==================
}