【问题标题】:Auto populate form options from spreadsheet column从电子表格列自动填充表单选项
【发布时间】:2019-07-22 06:46:12
【问题描述】:

我创建了一个带有下拉问题的 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 个选项,所以它只适用于六个选项,但根本不会删除整个列表选项

所以如果有人能帮助我以更好的方式完成工作,我将非常感激

【问题讨论】:

  • 我无法按照您的操作进行操作,选项列表会根据工作表的值进行更新,但是当您谈论您的问题时,删除选项是什么意思.您能否展示您正在经历/试图实现的目标的屏幕截图?
  • 您好 Alberto,感谢您的关注。删除选项是什么意思:好吧,事情就是这样,假设我的工作表中有一个列负责更新表单选项。在列中,我有 3 个选项,例如(选项 1、选项 2、选项 3),我添加了一个公式,一旦在表单中提交,就会自动从列中删除选项。因此,当用户选择选项 1 时,选项 1 从列中删除,我们只有选项 2、选项 3 等。但是当我返回表单时,我仍然有以下 3 个选项(Not_Found、选项 2 和选项 3)
  • 为了更清楚,我只需要添加一个代码来告诉表单“如果引用列中的单元格为空或空白,只需完全删除该选项而不添加 Not_Found ”提前致谢

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


【解决方案1】:

感谢cmets中的解释,试试下面的代码:

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您可以找到一些关于我使用的方法的文档以及有关使用数据验证的更多信息

【讨论】:

  • 感谢阿尔贝托的帮助。如果您不介意另一件事:如果我的工作表涉及许多选项卡,如何将您的脚本链接到特定选项卡??
  • 在使用 getActiveSpreadsheet() 之后,您将使用 getSheetByName(),就像我之前使用的那样(SpreadSheetApp.getActiveSheet() 将转到电子表格的打开工作表/选项卡。我编辑了代码以显示如何你可以这样做。
  • 是的,我明白了。非常感谢 Alberto 的帮助和关注
  • @MahmoudBayoumi 没问题,乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 2014-01-27
  • 2021-12-21
相关资源
最近更新 更多