从电子表格列自动填充表单选项

时间:2019-07-22 06:46:12

标签: google-apps-script google-sheets google-form

我创建了一个带有下拉问题的Google表单,并且希望使用所附电子表格中的特定列自动填充下拉列表。

我在网上搜索了解决方案,发现了两种有效的方法: 名为“ Form Ranger”的加载项以及要添加到工作表脚本编辑器中的代码

我首先尝试了该加载项,以便更轻松,更快地安装它,并且很好地解决了一个主要问题,即花费大量时间来更新表单中的列表是不可接受的,因此我决定将以下代码添加到工作表中脚本编辑器:

function updateForm(){
// call your form and connect to the drop-down item
var form = FormApp.openById("Your Form ID");

var namesList = form.getItemById("The Drop-Down List ID").asListItem();

// identify the sheet where the data resides needed to populate the drop-down
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Name of Sheet in Spreadsheet");

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

var studentNames = [];

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

// populate the drop-down with the array data
namesList.setChoiceValues(studentNames);

}

上面的代码效果更好,因为它在提交时立即更新了表单,仅存在两个问题:

  1. 不是完全删除该选项,而是将其替换为“ NOT_FOUND”
  2. 它根本不会删除最后一个选项;想象一下,我有7个选项,因此它只能与6个选项完美配合,但根本不会删除整个列表选项

因此,如果有人可以帮助我更好地完成工作,我将非常感激

1 个答案:

答案 0 :(得分:0)

感谢您在注释中的解释,请尝试以下代码:

function onEdit() {
  var ws = SpreadsheetApp.getActiveSpreadsheet();
  var ss = ws.getSheetByName("sheet1");
  var name = ss.getRange("A6:A8").getValues();

  var rule = SpreadsheetApp
  .newDataValidation()
  .requireValueInList(name)
  .build();

  ws.getRange("B3").setDataValidation(rule);  

}

更新工作表时将执行此代码,它将读取A6:A8中的“选项”(在我的示例中),并使用它们填充B3中的下拉菜单。 B3中的菜单将删除已删除的选项,并创建任何新选项。您可以将其耦合到您的代码中,该代码从您的选项中删除选项。

Here,您可以找到有关我使用的方法的一些文档以及有关数据验证的更多信息