Google 形成带有动态转到部分的列表项

Google forms list items with dynamic goto section

我发现这个答案早些时候发布在这里。

function GoToPage() {
    var form = FormApp.openById('MY FORM');
    var spreadsheet = SpreadsheetApp.openById("MY SPREADSHEET");
    var sheet = spreadsheet.getSheetByName("MY SHEET");
    var list = form.getItemById("MY MULTIPLE CHOICE ID").asListItem()  
    var pagebreak01 = form.getItemById("PAGE BREAK ID 1").asPageBreakItem();
    var pagebreak02 = form.getItemById("PAGE BREAK ID 2").asPageBreakItem();
    var pagebreak03 = form.getItemById("PAGE BREAK ID 3").asPageBreakItem();
    var choice1 = sheet.getRange("RANGE 1 FROM MY SHEET").getValues();
    var choice2 = sheet.getRange("RANGE 2 FROM MY SHEET").getValues();
    var choice3 = sheet.getRange("RANGE 3 FROM MY SHEET").getValues();  
    list.setChoices([
      list.createChoice(choice1, pagebreak01),
      list.createChoice(choice2, pagebreak02),
      list.createChoice(choice3, pagebreak03)]); 
    }

当在 choice# 变量中使用大于 1 的范围时,这只会做出一个选择,范围内的所有项目都以逗号分隔。我如何使用它来制作具有动态范围的选择列表?

我的确切选择应该是: “** 添加位置 **”,转到表单的新位置部分。 位置 1,转到下一节。 位置 2,转到下一节。 位置 3,等....

如果您 select 新位置并填写表格以添加新位置,脚本会将该位置名称添加到您下次填写表格时的选项中。所以这个列表会越来越大。

function updateForm() {

  var locationForm = form.getItemById("413015265").asListItem();
  var equipmentForm = form.getItemById("2123556695").asListItem();
  var newLocation = form.getItemById('231469190').asPageBreakItem();
  var newItem = form.getItemById('90044295').asPageBreakItem();
  var gotoIssue = form.getItemById('1493817332').asPageBreakItem();
  var gotoLocation = form.getItemById('1425783734').asPageBreakItem();
  var locations = tblLocations.getRange(2,2,tblLocations.getLastRow()-1,1).getValues();
  var items = tblItems.getRange(2,2,tblItems.getLastRow()-1,1).getValues();
  items = items.sort();
  locations = locations.sort();
  locationForm.setChoices([
    locationForm.createChoice("** Add Location **",newLocation),
    locationForm.createChoice(locations,gotoIssue)
  ]);
  equipmentForm.setChoices([
    equipmentForm.createChoice("** Add Item **",newItem),
    equipmentForm.createChoice(items,gotoLocation)
  ]);

}

在 运行 完成上述脚本后,我最终只有 2 个选择。 1 个可以正常工作的新 location/item 条目,以及 1 个包含电子表格中所有当前 locations/items 的条目,以逗号分隔。我可以 运行 setChoices 命令中的 foreach 循环吗?

function updateForm() {
  var locationForm = form.getItemById("413015265").asListItem();
  var equipmentForm = form.getItemById("2123556695").asListItem();
  var newLocation = form.getItemById('231469190').asPageBreakItem();
  var newItem = form.getItemById('90044295').asPageBreakItem();
  var gotoIssue = form.getItemById('1493817332').asPageBreakItem();
  var gotoLocation = form.getItemById('1425783734').asPageBreakItem();
  var locations = tblLocations.getRange(2,2,tblLocations.getLastRow()-1,1).getValues();
  var items = tblItems.getRange(2,2,tblItems.getLastRow()-1,1).getValues();
  var locationChoices = [];
  var itemChoices = [];
  locationChoices[0] = locationForm.createChoice("** Add Location **",newLocation);
  itemChoices[0] = equipmentForm.createChoice("** Add Item **",newItem);
  items = items.sort();
  locations = locations.sort();
  for (var i=0;i<tblLocations.getLastRow()-1;i++){
    locationChoices[i+1]= locationForm.createChoice(locations[i],gotoIssue);
  }
  locationForm.setChoices(locationChoices);
  for (var i=0;i<tblItems.getLastRow()-1;i++){
    itemChoices[i+1]= equipmentForm.createChoice(items[i],gotoLocation);
  }
  equipmentForm.setChoices(itemChoices);

}

我想通了。它可能不是最漂亮的解决方案,但它确实有效。 :)