google-apps-script - 如果选择超过一定次数,有没有办法从谷歌表格下拉菜单中删除选择?
问题描述
我有一列,我使用数据验证向其中添加了一个下拉列表。这些是时隙。我希望只有两个人能够选择一个插槽,因此如果该选项在列中至少重复两次,我希望该选项从下拉列表中消失。我试图用谷歌表单中的 Choice Eliminator 2 来做到这一点,但没有关于隐私政策的信息,所以不容易信任它们。有没有办法在谷歌表格中做到这一点?
解决方案
您可以使用 Google Apps 脚本来完成。我试图复制你想要做的事情,所以就在这里。
以下是示例输出:
仅选择一次选项时:
当一个选项被多次选择时:
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
正常工作。
这是否实现了您想要完成的任务?
推荐阅读
- html - 更新ID后结果值与原值不同
- python - 如果变量通过某些测试,则断言变量具有某些属性
- sql - 如何修复“Impossible de résoudre le conflit de classement entre French_CL_AI et French_BIN”?
- python - Telebot InlineKeyboard URL 无提示
- python - networkx 图的边缘标签不显示在 PyQt 嵌入式 matplotlib 中
- android - Android studio Artic fox 无法创建构建
- html - 使用 XSL 将 XML 转换为 HTMl 时丢失的值
- postgresql - 在需要比较运算符的 WHERE 子句中选择 count(*)
- security - 为什么 ModSecurity 会阻止外部链接?
- ruby - Selenium::WebDriver::Error::InvalidArgumentError:invalid 参数(会话信息:headless chrome=93.0.4577.82)