google-apps-script - 从属下拉列表
问题描述
我目前正在设计一个依赖下拉列表,我使用 Indirect 函数设置了该列表。在“I”列中,我有一个由“Livery”和“Operator”组成的下拉列表,相关下拉列表位于“K”列中,其中列出了取决于选择 Livery 或 Operator 的相关详细信息。
但是,我有第三个项目要添加到“I”列的下拉列表中,即“名称”,但如果选中,我希望这需要手动输入“K”列 - 是否可以让工作表给我如果选择了 Livery 或 Operator,则为依赖下拉列表,但如果选择了 Name,则为手动输入的空白单元格?
解决方案
您的问题可以通过使用 Apps 脚本和编写脚本来解决。
第一个功能是使用该方法创建具有您想要的值的下拉菜单.newDataValidation()
。
function createDropdown() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(['Livery','Operator','Name'],true).build();
ss.getRange('I1').setDataValidation(rangeRule);
}
第二个函数将用于I cell
根据K cell
.
//the installable trigger
function onEditTrigger(e) {
var sheet = e.range.getSheet();
var cellValue = e.range.getValue();
var liveryOptions = ['livery1', 'livery2', 'livery3', 'livery4'];
var operatorOptions = ['operator1', 'operator2', 'operator3', 'operator4'];
if (cellValue == 'Name') {
SpreadsheetApp.getUi().alert('Input your name in the K1 cell');
sheet.getRange("K1").setDataValidation(null);
sheet.getRange("K1").clear();
sheet.getRange("K1").setBackground("yellow");
} else if (cellValue == 'Operator') {
sheet.getRange("K1").setBackground("white").setValue("Choose an option");
var dataValidation = SpreadsheetApp.newDataValidation().requireValueInList(operatorOptions, true).build();
sheet.getRange("K1").setDataValidation(dataValidation);
} else if (cellValue == 'Livery') {
sheet.getRange("K1").setBackground("white").setValue("Choose an option");
var dataValidation = SpreadsheetApp.newDataValidation().requireValueInList(liveryOptions, true).build();
sheet.getRange("K1").setDataValidation(dataValidation);
}
}
为了使您的下拉选择起作用,您应该向第二个功能添加一个可安装的触发器。
您可以转到项目的触发器并使用以下属性创建一个新触发器:
当您运行脚本时,您只需运行该createDropdown()
函数,因为触发器将在后台连续运行。
以下是脚本的工作原理:
何时 Livery
选择
Name
选择 时,Alert prompt
将显示要求用户在单元格上输入数据
此外,这里有一些可能对您有所帮助的链接:
推荐阅读
- flutter - 如何从后台运行的应用程序中监听所有全局按键事件?
- python - 给定列表中的 Python 匹配字典
- apache-spark - 使用 python 可执行文件而不是 spark-submit 提交 Spark 作业
- apache-spark - 在pyspark中使用array_zip进行groupby和collect_list时保留列名
- ruby - 检查两个字符串是否非常相似(相似的字符、模式等)
- android - (RoomDatabase) 从资产更新数据库值而不丢失用户数据
- javascript - 使用 Vue.js,如何在 v-for 循环中使用模态组件?
- javascript - 如何使用 document.createElement("img") 在 javascript 中显示带有类的 img?
- mysql - 如何避免我的 Express API 被公司防火墙阻止
- c# - 通过 DBContext .Net Core 的 OnModelCreating 存储自定义类属性,如 String