【发布时间】:2019-10-11 01:54:01
【问题描述】:
三个小时前,我根本不知道怎么做依赖下拉列表。现在,我有一个数据验证列,在选择数据时,将为下一个单元格提供一个下拉列表。但是,我想这样做两次。问题是,我不知道如何在脚本中复制它。 This is how I even got this far
This is the link to my Google Sheet
这是我在尝试处理 FEEDBACK 列之前的代码。 TECHNICAL 列按预期工作:
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Raw Data");
var wsTechnical = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Drop Downs - Technical");
var technical = wsTechnical.getRange(2, 1,wsTechnical.getLastRow()-1,2).getValues();
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var wsName = activeCell.getSheet().getName();
if(wsName == "Raw Data" && c === 6 && r > 2){
if(val === ""){
ws.getRange(r, 7).clearContent();
ws.getRange(r, 7).clearDataValidations();
} else {
ws.getRange(r, 7).clearContent();
var filteredTechnical = technical.filter(function(t){ return t[0] === val });
var listToApply = filteredTechnical.map(function(t){ return t[1] });
var cell = ws.getRange(r, 7);
applyValidationToCell(listToApply,cell);
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
这就是我改变它的方式,希望它能为 FEEDBACK 列创建相同的流程,但它完全没有改变; TECHNICAL 列仍按预期工作,但 FEEDBACK 列不能 :
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Raw Data");
var wsFeedback = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Drop Downs - Feedback");
var feedback = wsFeedback.getRange(2, 1,wsFeedback.getLastRow()-1,2).getValues();
var wsTechnical = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Drop Downs - Technical");
var technical = wsTechnical.getRange(2, 1,wsTechnical.getLastRow()-1,2).getValues();
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCel1.getColumn();
var wsName = activeCell.getSheet().getName();
if(wsName == "Raw Data" && c === 4 && r > 2){
if(val === ""){
ws.getRange(r, 5).clearContent();
ws.getRange(r, 5).clearDataValidations();
} else {
ws.getRange(r, 5).clearContent();
var filteredFeedback = feedback.filter(function(f){ return f[0] === val });
var listToApply = filteredFeedback.map(function(f){ return f[1] });
var cell = ws.getRange(r, 5);
applyValidationToCell(listToApply,cell);
}
}
}
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var wsName = activeCell.getSheet().getName();
if(wsName == "Raw Data" && c === 6 && r > 2){
if(val === ""){
ws.getRange(r, 7).clearContent();
ws.getRange(r, 7).clearDataValidations();
} else {
ws.getRange(r, 7).clearContent();
var filteredTechnical = technical.filter(function(t){ return t[0] === val });
var listToApply = filteredTechnical.map(function(t){ return t[1] });
var cell = ws.getRange(r, 7);
applyValidationToCell(listToApply,cell);
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
任何帮助将不胜感激!
编辑:再说一次,我对脚本几乎一无所知,而且……所有这些。如果愿意,请为我降低答案。谢谢!
【问题讨论】:
标签: google-apps-script google-sheets