Я использую скрипт Google Apps для добавления вопросов из Google Таблиц в Google Form. Списки считываются из двух отдельных массивов и добавляются как отдельные вопросы типа сетки. Я также установил лист как место назначения для результатов формы.
Когда я запускаю скрипт, форма обновляется идеально. Если нужно добавить 10 элементов, в форму добавляются 10 вопросов. Однако на связанной листе ответов формы часто добавляются дополнительные столбцы с заголовком «[Строка 1]». Количество дополнительных столбцов и их положение меняются, как кажется, каждый раз, когда я запускаю скрипт. Я не смог уловить никаких закономерностей.
Я знаю, что «Строка 1» отображается как первый элемент по умолчанию в вопросе типа сетки при создании вопроса в пользовательском интерфейсе формы. Я не уверен, связано ли это с этим. К вашему сведению - элементы сетки позволяют добавлять несколько строк вопросов, но я добавляю только один вопрос. Я знаю, что существует сетка с множественным выбором, но мне не нравится ее форматирование.
В качестве обходного пути я создал сценарий для удаления всех этих дополнительных столбцов, но мне бы очень хотелось выяснить, что на самом деле происходит.
Есть идеи о том, что происходит?
Вот часть моего кода:
function editForm()
{
var setupSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Setup'); //Create variable for the Setup sheet
var metricSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final Metric Statements'); //Create variable for the Metric Statements sheet
var form = FormApp.openById(setupSheet.getRange("D1").getValue()); //Open form using the form ID from the setup sheet
var pageFour = form.addPageBreakItem().setTitle('Questions');
var emotLen = 0; //Counter for sub-emotion items
var featLen = 0; //Counter for sub-feature items
//Count number of items for first list
while (((metricSheet.getRange("C"+ (emotLen+2)).getValue()) != "") && ((metricSheet.getRange("C"+ (emotLen+2)).getValue()) != "#N/A")) //Go through sub-emotion column until a blank cell
{
emotLen++; //Increase the counter
}
//Count number of items for second list
while (((metricSheet.getRange("D"+ (featLen+2)).getValue()) != "") && ((metricSheet.getRange("D"+ (featLen+2)).getValue()) != "#N/A")) //Go through sub-feature column until a blank cell
{
featLen++; //Increase the counter
}
if (emotLen > 0)
{
var emotRng = metricSheet.getRange(2,3,emotLen); //Create a range for sub-emotions based on number of items and column
var emotArray = emotRng.getValues(); //Copy the items into an array
for (i=0; i <= (emotLen-1); i++)
{
var emotItem = form.addGridItem();
emotItem.setRows(emotArray[i]);
emotItem.setColumns(['Strongly Disagree', 'Disagree','Slightly Disagree', 'Neither Disagree or Agree', 'Slightly Agree', 'Agree', 'Strongly Agree', 'N/A']);//Add column header
emotItem.setRequired(true);
}
}
if (featLen > 0 )
{
var featRng = metricSheet.getRange(2,4,featLen); //Create a range for features based on number of items
var featArray = featRng.getValues(); //Copy the items into an array
for (i = 0; i <=(featLen-1); i++) //Go through all items in the array
{
var featItem = form.addGridItem();//Add item to survey
featItem.setRows(featArray[i]); //Add row item
featItem.setColumns(['Strongly Disagree', 'Disagree','Slightly Disagree', 'Neither Disagree or Agree', 'Slightly Agree', 'Agree', 'Strongly Agree', 'N/A']);//Add column header
featItem.setRequired(true);
}
}
//deleteRowColumns();
//Logger.log(emotLen, emotArray, featLen, featArray); //Logger used for debugging
}
А вот скриншот листа ответов формы с дополнительным столбцом: