首页 > 解决方案 > 如果选择超过一定次数,有没有办法从谷歌表格下拉菜单中删除选择?

问题描述

我有一列,我使用数据验证向其中添加了一个下拉列表。这些是时隙。我希望只有两个人能够选择一个插槽,因此如果该选项在列中至少重复两次,我希望该选项从下拉列表中消失。我试图用谷歌表单中的 Choice Eliminator 2 来做到这一点,但没有关于隐私政策的信息,所以不容易信任它们。有没有办法在谷歌表格中做到这一点?

标签: google-apps-scriptgoogle-sheets

解决方案


您可以使用 Google Apps 脚本来完成。我试图复制你想要做的事情,所以就在这里。

以下是示例输出:

仅选择一次选项时:

样本输出1

当一个选项被多次选择时:

样本输出2

A 列是下拉列表基于其选项的位置。

B 列是检查答案的地方。

每次用户编辑工作表时,脚本都会检查是否在 B 列中多次选择了某个选项。如果确实找到了多次选择的元素,则将它们从下拉列表中删除。

这是代码。

function onEdit(e){   
  var sheets = SpreadsheetApp.getActive();
  // 'max' is responsible how many the item can be chosen before being removed from the dropdown list
  const max = 1; 
  
  var dropdown = sheets.getRange('C2');
  var options = sheets.getRange('A2:A6');
  var answers = sheets.getRange('B2:B6');

  // create array to contain option and answer values and remove duplicates/invalid elements
  var optionsValues = options.getValues().flat().filter((item, i, ar) => ar.indexOf(item) === i).filter((item) => item.length !== 0);
  // we are not removing duplicates from the answer, as that will determine if how many the option has been chosen
  var answersValues = answers.getValues().flat().filter((item) => item.length !== 0);

  // remove more than once existence of options in column answers
  for (var i = 0; i < answersValues.length; i++) {
    if (answersValues.filter((item) => item == answersValues[i]).length > max) {
      // remove items that are more than 'max' allowed value
      optionsValues = optionsValues.filter((item) => item !== answersValues[i]);
    }
  }

  var rule = SpreadsheetApp.newDataValidation().requireValueInList(optionsValues).build();
  dropdown.setDataValidation(rule);
}

代码有注释并且应该具有足够的描述性,但是如果您有任何问题和说明,请随时发表评论。

此外,请确保正确设置触发器,因为它需要onEdit正常工作。

这是否实现了您想要完成的任务?


推荐阅读