我在各种情况下使用G表,这是一个非常常见的用例。 在这种情况下,假设电子表格如下所示: https://docs.google.com/spreadsheets/d/1PAg2Gr2T1gUmqlbAJaJjMQ37yO_YI5sYz9WMY3Q1lEg/edit?usp=sharing
B列中的大陆,C列中的国家。然后,在另一张纸上,列出了与给定国家/地区对应的值的列表。所以我要在C列中从各大洲的列表中选择,但在D列中,从该大洲的国家列表中选择。
B | C栏| D栏|
巴黎|欧洲|法国|
我已经审查了有关如何使用脚本执行此操作的问题,但似乎无法复制它。我还想知道是否可以通过公式或通过添加其他过滤表来做到这一点?
答案 0 :(得分:1)
您可以使用脚本或公式来完成相关的下拉列表。
单个下拉菜单:
在C6
工作表的单元格Data
中创建一个下拉列表,该列表使用B3:B
工作表(列区域)中Values
范围内的值。然后将下面的代码复制到脚本编辑器,然后单击保存。每次您在单元格C6
的下拉列表中选择一个新项目时,相关的下拉列表都会显示/更新,并在单元格D6
中列出相应国家/地区的列表。有关如何设置和使用此解决方案的信息,请参见说明。
function onEdit(e){
const as = e.source.getActiveSheet();
const val = e.range.getValue();
const val_not = e.range.getA1Notation();
const vs = e.source.getSheetByName("Values");
const opts = vs.getRange('B3:C' + vs.getLastRow()).getValues();
if (val_not =='C6' && as.getName() == "Data"){
const fopts = opts.filter(o=>o[0]==val)
const droplist = fopts.map(o=>o[1]).sort().reverse().filter((v, i, a) => a.indexOf(v) === i);
const cell = as.getRange('D6');
const rule = SpreadsheetApp.newDataValidation().requireValueInList(droplist).setAllowInvalid(false).build();
cell.clearContent();
cell.clearDataValidations();
cell.setDataValidation(rule);
}
}
说明:
多个下拉菜单:
逻辑与以前完全相同。您要做的唯一修改就是将C
列中的下拉列表上/下拖到您要创建下拉列表的单元格中,并使用以下脚本:
function onEdit(e){
const as = e.source.getActiveSheet();
const val = e.range.getValue();
const row = e.range.getRow();
const col = e.range.getColumn();
const vs = e.source.getSheetByName("Values");
const opts = vs.getRange('B3:C' + vs.getLastRow()).getValues();
if (row > 2 && col == 3 && as.getName() == "Data"){
const fopts = opts.filter(o=>o[0]==val)
const droplist = fopts.map(o=>o[1]).sort().reverse().filter((v, i, a) => a.indexOf(v) === i);
const cell = as.getRange(row,4);
const rule = SpreadsheetApp.newDataValidation().requireValueInList(droplist).setAllowInvalid(false).build();
cell.clearContent();
cell.clearDataValidations();
cell.setDataValidation(rule);
}
}
我不想在这里提供说明,这将使这篇文章比现在更长,而是将您重定向到YouTube视频,这将帮助您弄清楚如何使用Google表格公式设置相关的下拉列表:>