【问题标题】:Multiple dependent drop-down lists in google sheets without script [closed]没有脚本的谷歌工作表中的多个依赖下拉列表[关闭]
【发布时间】:2020-09-30 17:00:10
【问题描述】:

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

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

上校。乙|上校 C | D上校|

巴黎 |欧洲 |法国|

我已经查看了有关如何使用脚本执行此操作的问题,但似乎无法复制它。我还想知道是否有一种快速而简单的方法可以使用公式或添加额外的过滤表来做到这一点。

【问题讨论】:

  • 欢迎来到Stack Overflow。本网站上的帖子应仅限于一个问题,并且应该是具体的。请编辑问题以将其限制为单个问题(脚本或公式?)并显示您尝试过的内容以及您遇到的问题。

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


【解决方案1】:

您可以使用脚本或公式来完成依赖下拉列表。

Google Apps 脚本

单个下拉菜单:

在Data 工作表的单元格C6 中创建一个下拉列表,该列表从Values 工作表(列区域)中的B3:B 范围内获取值。然后将下面的代码复制到脚本编辑器并单击保存。每次您在单元格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);            
    }      
  } 


Google 表格公式

我不想在这里提供解释,这会使这篇文章比现在更长,我更愿意将您重定向到 YouTube 视频,该视频将帮助您了解如何使用 google 表格公式设置依赖下拉列表:

Google Sheets - Drop Down List, 2 Dependent Dropdown Lists

【讨论】:

  • 如果您可以在此处提供您演示的工作表的链接,那就太好了,这样我们就可以看到所有内容是如何链接在一起的(尤其是脚本和工作表)
  • @youngrrrr 嗨!不幸的是,我没有这张单子了。但是,如果您看到 gif 图片,我会显示下拉菜单的值范围,以及主工作表以及我如何安装所有内容。如果您有任何问题,请告诉我,我当然会帮助您。
  • 啊,真是不幸。我希望有一个可移植/模块化的解决方案,但似乎我只需要学习一些 Google 脚本。谢谢你的回答!它让我走上了正确的道路:)
  • @youngrrrr 如果它帮助您朝着正确的方向发展,请考虑支持答案:)
  • @Mario 您制作的这个脚本运行良好,但是,我发现了 2 个可能的“问题”: 1-在 list2 中添加或删除值时,旧单元格(已经填充),不考虑列表中的新值。 2-当将相同的值粘贴到相同的单元格中时(尝试更新值列表2),列表开始考虑新值。但是,填写的值会被自动清除;你看看有没有办法解决这些问题?在下面的视频中,我演示了这个问题:photos.app.goo.gl/wMxAYTAnsWmQpHiA6
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多