我在名为“Dashboard”的工作表的F5单元格中有一个主题下拉列表。主题列表(例如,All、ICTE4113、HUM4115、PHY 4105)来自另一个名为“主”的选项卡,其中主题位于第6列,日期位于第1列。
现在在仪表板的G5单元格中,我想看到一个下拉列表,其中只列出与仪表板F5单元格中所选主题相关的唯一日期。但它根本不会产生任何下拉列表。
显然,这些独特的日期将来自Master表的第1列。我的代码如下:
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var wsOptions = spreadsheet.getSheetByName("Master");
var options = wsOptions.getRange(2, 1, wsOptions.getLastRow()-1,6).getValues();
function onEdit(e){
var range = SpreadsheetApp.getActiveSheet().getRange('F5');
var val = range.getValue();
if(val === "All"){
dashboard.getRange('G5').setValue(new Date()).setNumberFormat("yyyy-mm-dd");
dashboard.getRange('G5').clearDataValidations();
}
else{
var filteredOptions = options.filter(function(o){return o[0] === val});
var listToApply = filteredOptions.map(function(o){return o[6]});
//console.log(listToApply);
var cell = dashboard.getRange('G5');
var rule = SpreadsheetApp.newDataValidation().requireValueInList(listToApply).setAllowInvalid(false).build();`
cell.setDataValidation(rule);
}
}
你很接近。
代码中有两个与同一事物相关的主要问题:
var filteredOptions = options.filter(function(o){return o[0] === val});
var listToApply = filteredOptions.map(function(o){return o[6]});
您根据错误的列进行筛选。
>
filteredOptions
应该过滤列F,因此它应该返回o[5]===val。
listToApply
应该在列A上过滤,因此它应该是返回o[0]
。
我也做了一些改变:
>
我在每次选择后清除下拉框中的前一个值:
cell.clearContent();
cell.clearDataValidations();
最后但并非最不重要的一点是,当您使用onEdit(e)
时,最好获取对使用事件
对象编辑的工作表和单元格的引用。
例如,通过使用此if条件,可以确保仅在仪表板工作表中的单元格F5上有编辑时才执行代码:
if (val_not =='F5' && as.getName() == "Dashboard") {code to be executed}
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var wsOptions = spreadsheet.getSheetByName("Master");
var options = wsOptions.getRange(2, 1, wsOptions.getLastRow()-1,6).getDisplayValues();
function onEdit(e){
var as = e.source.getActiveSheet();
var val = e.range.getValue();
var val_not = e.range.getA1Notation();
if (val_not =='F5' && as.getName() == "Dashboard"){
if(val === "All"){
dashboard.getRange('G5').setValue(new Date()).setNumberFormat("yyyy-mm-dd");
dashboard.getRange('G5').clearDataValidations();
}
else{
var filteredOptions = options.filter(function(o){return o[5] === val});
var listToApply = filteredOptions.map(function(o){return o[0]}).sort().reverse();
var cell = dashboard.getRange('G5');
var rule = SpreadsheetApp.newDataValidation().requireValueInList(listToApply).setAllowInvalid(false).build();
cell.clearContent();
cell.clearDataValidations();
cell.setDataValidation(rule);
}
}
}
我已经创建了一个基于本教程的依赖下拉列表的谷歌表。我创建的工作表的副本。我对依赖下拉列表的功能很满意,但是我的目标是从“材料”表(列B: I)中复制一行中的所有数据,这些数据对应于从列E中的依赖下拉列表中选择的选项"crop_specific"表,将此信息复制到列E: L。我想保留当前脚本的功能,如果从D列中选择的内容发生更改,则清除E列中的内容,并将其扩展到整个行。任何帮助都将不胜感激。脚本的代
我想在选择另一个select元素的一个选项时显示一个select元素,在选择另一个选项时隐藏它。 这是JavaScript: 感谢任何帮助。谢谢
问题内容: 我想创建两个下拉列表,类别和项目。 如果我选择名为car的类别之一,则项目下拉列表应包含Honda,Volvo和Nissan。 如果我选择一个名为phone的类别,则项目下拉列表应具有此iPhone,Samsung,Nokia。 我怎样才能做到这一点?我知道我无法使用纯HTML做到这一点。 问题答案: 工作演示 (带有jquery) 更新 :使用eval()能够添加所需的任意数量的数组
我已经通读了所有其他文章,我没有找到我的答案。 我从一个带有对象选项的JOptionPane开始。当用户选择动物或栖息地时,会出现另一个带有选项的下拉列表。现在我正在努力让另一个信息弹出窗口在狮子被选中时打开。但我不能让它工作。 我还查看了其他人的输入,以便能够显示这些下拉列表。但他们使用的是JFrame,因此在NetBeans之外会打开另一个java窗口。 我现在要做的是为下拉列表中的选项输入i
问题内容: 我需要使用cypress测试angularjs应用程序的下拉列表。 我需要单击一个下拉列表,然后从下拉列表中选择或单击一个项目。我尝试如下所示,它只能在一个实例上使用,而不能在其他情况下使用,因为第二个get()方法中的ID号随着其动态生成而不断变化。这不是带有html中选项的标准选择。 1)无论如何,我可以在每个选项上设置一个唯一属性并仅选择所需的属性,还是可以仅基于列表项的描述进行
问题内容: 我需要使用JavaScript根据下拉菜单A中的选择更改下拉菜单B的内容。没有涉及到数据库查询- 我事先知道应该在A中选择B的内容。我已经找到了一些使用AJAX的示例,但是由于没有涉及到数据库查询,所以没有必要。谁能为我指出一些示例代码以实现此目的? 问题答案: function configureDropDownLists(ddl1, ddl2) {