没有脚本的Google表格中的多个相关下拉列表

时间:2020-09-30 17:00:10

标签: javascript google-apps-script google-sheets google-sheets-formula google-query-language

我在各种情况下使用G表,这是一个非常常见的用例。 在这种情况下,假设电子表格如下所示: https://docs.google.com/spreadsheets/d/1PAg2Gr2T1gUmqlbAJaJjMQ37yO_YI5sYz9WMY3Q1lEg/edit?usp=sharing

B列中的大陆,C列中的国家。然后,在另一张纸上,列出了与给定国家/地区对应的值的列表。所以我要在C列中从各大洲的列表中选择,但在D列中,从该大洲的国家列表中选择。

B | C栏| D栏|

巴黎|欧洲|法国|

我已经审查了有关如何使用脚本执行此操作的问题,但似乎无法复制它。我还想知道是否可以通过公式或通过添加其他过滤表来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用脚本或公式来完成相关的下拉列表。

Google Apps脚本

单个下拉菜单:

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);            
    }      
  } 
  

说明:

dropdown gif


多个下拉菜单:

逻辑与以前完全相同。您要做的唯一修改就是将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);            
    }      
  } 

enter image description here


Google表格公式

我不想在这里提供说明,这将使这篇文章比现在更长,而是将您重定向到YouTube视频,这将帮助您弄清楚如何使用Google表格公式设置相关的下拉列表:

Google Sheets - Drop Down List, 2 Dependent Dropdown Lists