Copy of the sheet I've created.我对dependent下拉列表的功能很满意,但是我的目标是从"materials“表(列B:I)中复制行中的所有数据,这些数据对应于从"crop_specific”表的E列的dependent下拉列表中选择的选项,将此信息复制到E:L列。我希望保留当前脚本的功能,如果从D列的选择发生更改,则清除E列中的内容,将其扩展到整个行。任何帮助都将不胜感激。该脚本的代码如下。
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("crop_specific");
var wsMaterials = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("materials");
var options = wsMaterials.getRange(2,1,wsMaterials.getLastRow()-1,9).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 == "crop_specific" && c === 4 && r>1){
if(val === ""){
ws.getRange(r,5).clearContent();
ws.getRange(r,5).clearDataValidations();
}else {
ws.getRange(r,5).clearContent();
var filteredOptions = options.filter(function(o){ return o[0] ===val });
var listToApply = filteredOptions.map(function(o){return o[1] });
var cell = ws.getRange(r,5);
applyValidationToCell(listToApply,cell);
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule);
}
发布于 2021-02-04 22:15:48
解释:
materials
工作表中提取数据。materials
工作表中将B复制到I。crop_specific
工作表中的E到L范围。我对crop_specific
表有一些担忧:
解决方案:
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("crop_specific");
var wsMaterials = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("materials");
var options = wsMaterials.getRange(2,1,wsMaterials.getLastRow()-1,9).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 == "crop_specific" && c === 4 && r>1){
if(val === ""){
ws.getRange(r,5).clearContent();
ws.getRange(r,5).clearDataValidations();
}else {
ws.getRange(r,5).clearContent();
var filteredOptions = options.filter(function(o){ return o[0] ===val });
var listToApply = filteredOptions.map(function(o){return o[1] });
var cell = ws.getRange(r,5);
applyValidationToCell(listToApply,cell);
var matData = wsMaterials.getDataRange().getValues().filter(r=>r[0]===val); // new code
matData.forEach(a => a.splice(0, 1)); // new code
ws.getRange("E2:L" + ws.getLastRow()).clearContent(); // new code
ws.getRange(r,5,matData.length,matData[0].length).setValues(matData); // new code
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule);
}
https://stackoverflow.com/questions/66053565
复制相似问题