【发布时间】:2020-09-19 12:59:58
【问题描述】:
我在名为“仪表板”的工作表的 F5 单元格中有一个主题下拉列表。主题列表(例如 All、ICTE4113、HUM4115、PHY 4105)来自另一个名为“Master”的选项卡,其中主题位于第 6 列,日期位于第 1 列。
现在在仪表板的 G5 单元格中,我想看到一个下拉列表 只有那些与在 F5 单元格中选择的主题相关的唯一日期 仪表板。但它根本不会产生任何下拉列表。
显然,这些独特的日期将来自主表的第 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);
}
}
【问题讨论】:
-
也许你需要在应用新的之前使用 cell.clearDataValidations()。
-
您能否提供一份工作表副本,以便我们测试和重现该问题?谢谢
-
@Marios 请注意,它用于在 F5 和 G5 单元格手动输入。工作表位于:docs.google.com/spreadsheets/d/…
-
@TamjidTaha 我发布了我的解决方案。让我知道它是否对您有用。
-
@Marios 目前下拉列表是按升序排列的,但我需要它按降序排列,最新日期排在第一位。试图解决这些方法但做不到 //var optionss = options.sort({column: 1, ascending: false}); //var options2 = options.sort(descOrder);请指教。
标签: javascript google-apps-script google-sheets