Google Apps Script добавляет дополнительные пустые вопросы в лист ответов на форму при импорте из Google Sheets - PullRequest
1 голос
/ 03 апреля 2020

Я использую Google Apps Script для добавления вопросов из таблиц Google в форму Google. Списки читаются из двух отдельных массивов и добавляются в виде отдельных вопросов типа Grid. Я также установил лист в качестве места назначения для результатов формы.

Когда я запускаю скрипт, форма обновляется идеально. Если нужно добавить 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
}

А вот скриншот листа ответов на форму с дополнительным столбцом: enter image description here

1 Ответ

1 голос
/ 06 апреля 2020

Похоже, это ошибка!

Я позволил себе сообщить об этом в Google Tracker для вас, подробно описав поведение:

Вы можете нажать ☆ рядом с номером проблемы в вверху слева на странице, которая позволяет Google знать, что с этим сталкивается больше людей, и поэтому вероятность того, что это увидят быстрее, будет выше.

Надеюсь, это поможет вам!

...