Google AppScript - обновить форму Google, используя appscript - PullRequest
0 голосов
/ 09 марта 2020

У меня есть следующий сценарий

В настоящее время я обновляю свою форму, используя appscript, который работает нормально, однако у меня есть эта проблема, у моей формы есть вопрос, чтобы выбрать страну (из выпадающего списка стран) и каждый вариант сопоставлен ли каждый раздел (скажем, если я выберу страну в качестве Нидерландов при заполнении формы, я перейду к следующему разделу, чтобы выбрать город в Нидерландах в указанном разделе), так что теперь происходит, когда в страну добавляется новая страна. обновите его в форме с помощью скрипта ниже, и он отлично работает, но он сбрасывает карту сечения, заданную для каждой страны, поэтому нам нужно снова повторить ответ на основе сечения! Я хотел бы понять, есть ли способ избежать сброса параметров, основанных на разделе.

Код

var ssID = "sheet ID"; //Global Variable sheet ID

// This is start of function1 to update form Monthly 
function formUpdateCC() {
  // call your form and connect to the drop-down item
  var form = FormApp.openById("form ID");

  var country = form.getItemById("ItemID").asListItem();

  // identify the sheet where the data resides needed to populate the drop-down - Countrylist
  var countrysheet = SpreadsheetApp.openById(ssID).getSheetByName("Country");

  // grab the values in the first column of the country tab in sheet - use 2 to skip header row
  var countrylist = countrysheet.getRange(2, 1, countrysheet.getMaxRows() - 1).getValues();

  var data = [];

  // convert the array ignoring empty cells
  for (var i = 0; i < countrylist.length; i++)
    if (countrylist[i][0] != "")
      data[i] = countrylist[i][0];

  country.setChoiceValues(data);

}

1 Ответ

2 голосов
/ 09 марта 2020

Вы можете использовать setChoices с createChoice (value, navigationItem) вместо setChoiceValues, чтобы добавить навигацию к выборам. Создайте новый столбец (в данном примере это столбец B) с идентификатором раздела для раздела, по которому вы хотите перейти для этой страны. Затем используйте код ниже, чтобы обновить форму.

  var form = FormApp.openById("Form Id");
  var country = form.getItemById("List Id").asListItem();

  // identify the sheet where the data resides needed to populate the drop-down - Countrylist
  var countrysheet = SpreadsheetApp.openById(ssID).getSheetByName("Country");

  // create a new column next to the country name for its target pagebreak ID from the form
  // grab the values in the first & second columns of the country tab in sheet - use 2 to skip header row
  var countrylist = countrysheet.getRange(2, 1, countrysheet.getMaxRows() - 1).getValues();
  var targetlist = countrysheet.getRange(2, 2, countrysheet.getMaxRows() - 1).getValues();

  var data = [];

  // convert the array ignoring empty cells
  var s = 0;
  for (var i = 0; i < countrylist.length; i++)
    if (countrylist[i][0] != "") {
  // use createChoice(value, navigationItem) to add the section navigation
      data[s] = country.createChoice(countrylist[i][0], form.getItemById(targetlist[i][0]).asPageBreakItem());
      s++;
    }

  country.setChoices(data);
...