Google 表格的 AppScript 来过滤下拉列表

问题描述 投票:0回答:1

我正在 Google Sheets 中创建一个电子表格,作为应用程序在数据库中引入一些数据。

我在创建列表动态更改的下拉列表时遇到问题。 我将尝试解释它,这是简化版本: https://docs.google.com/spreadsheets/d/1x2VwmnyiksitzeXQpGocBetef2GilvqIY8ar-6zJChc/edit#gid=307999969

我有一个下拉菜单,可以在多个选项之间进行选择(在示例中,在 A、B 和 C 之间)。 根据此选项,A 列中有不同的参数(使用 FILTER 函数)。在每个选项上,我想添加一个下拉列表,该列表取决于左侧单元格的结果(对于 B2,它应该是 A2)。该列表包含在“主”表中。 在这里,如果我选择选项 A,则会出现参数列表:设备、配方和时间。 在“设备”旁边,有一个下拉列表,我应该能够在 Eq1、Eq2 或 Eq3 之间进行选择。 我想在下拉列表中添加 FILTER 或 VLOOKUP 类型的功能,因此它会检查 MASTER 表上的参数名称并使用该列表作为下拉列表。

我尝试使用 ChatGPT,但给了我一些永远无法工作的代码。最接近的是仅当手动更改左侧单元格时才更改下拉列表的代码,但当 FILTER 函数的结果更改时从未更改它。

我无法单独创建(和隐藏)动态表,因为应用程序有数百个这样的表。

您知道如何实施吗? 谢谢你

google-sheets google-sheets-formula dropdown
1个回答
0
投票

推荐解决方案

您可以使用此答案作为您想要完成的任务的参考。

选项 1

使用

Google Sheets Formulas
,您可以执行以下步骤来实现您想要做的事情。

  1. MASTER
    工作表中设置一个辅助列,该列取决于您在
    Sheet31
    过滤器中的选择。

它看起来像这样:

HELPER COLUMN

谷歌表格公式

在单元格中

K1

=QUERY(TRANSPOSE(A2:I),"Select * where Col1 ='"&Sheet31!A2&"'")

在单元格中

K2

=QUERY(TRANSPOSE(A2:I),"Select * where Col1 ='"&Sheet31!A3&"'")

在单元格中

K3

=QUERY(TRANSPOSE(A2:I),"Select * where Col1 ='"&Sheet31!A4&"'")

这使其成为动态的,因此表示例中的所有选项都将被选中。

  1. 创建一个指向您创建的帮助列的数据验证下拉列表。

类似这样的:

DROPDOWN DATA VALIDATION

在单元格中

B2

=MASTER!$L$1:$Z$1

在单元格中

B3

=MASTER!$L$2:$Z$2

在单元格中

B4

=MASTER!$L$3:$Z$3

您可以根据您有多少选项更改单元格范围的最后部分。

输出(另一个窗口中有帮助列)

OUTPUT1

选项 2

使用 Google Apps 脚本,您可以使用

onEdit(e)
触发器来执行您想要执行的操作。

我还添加了一些代码功能的解释

function onEdit(e) {
  // Initializes the trigger
  var value = e.value;
  // Gets your current active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // Gets the sheet named "MASTER"
  var masterSheet = ss.getSheetByName("MASTER");
  // Gets the sheet named "Sheet31"
  var sheet31 = ss.getSheetByName("Sheet31");

  // Gets the ranges for the dropdown
  var dropdown1 = sheet31.getRange("B2");
  var dropdown2 = sheet31.getRange("B3");
  var dropdown3 = sheet31.getRange("B4");

  // Gets the ranges of the options for the dropdown
  // Option A
  var equipmentOptions = masterSheet.getRange(3, 1, 3);
  var formulationOptions = masterSheet.getRange(3, 2, 4);
  var timeOptions = masterSheet.getRange(3, 3, 3);

  // Option B
  var schedOptions = masterSheet.getRange(3, 4, 3);
  var templateOptions = masterSheet.getRange(3, 5, 2);
  var dayOptions = masterSheet.getRange(3, 6, 2);

  // Option C
  var areaOptions = masterSheet.getRange(3, 7, 3);
  var zoneOptions = masterSheet.getRange(3, 8, 2);
  var partOptions = masterSheet.getRange(3, 9, 4);

  // Initialization for the data validation
  var dropdownDataValidation = SpreadsheetApp.newDataValidation();

  // Sets the dropdown of data validation depending on the value
  if (value == "A") {
    dropdown1.setDataValidation(dropdownDataValidation.requireValueInRange(equipmentOptions));
    dropdown2.setDataValidation(dropdownDataValidation.requireValueInRange(formulationOptions));
    dropdown3.setDataValidation(dropdownDataValidation.requireValueInRange(timeOptions));
  } else if (value == "B") {
    dropdown1.setDataValidation(dropdownDataValidation.requireValueInRange(schedOptions));
    dropdown2.setDataValidation(dropdownDataValidation.requireValueInRange(templateOptions));
    dropdown3.setDataValidation(dropdownDataValidation.requireValueInRange(dayOptions));
  } else if (value == "C") {
    dropdown1.setDataValidation(dropdownDataValidation.requireValueInRange(areaOptions));
    dropdown2.setDataValidation(dropdownDataValidation.requireValueInRange(zoneOptions));
    dropdown3.setDataValidation(dropdownDataValidation.requireValueInRange(partOptions));
  }
}

输出

OUTPUT2

参考文献

选项 1

选项 2

© www.soinside.com 2019 - 2024. All rights reserved.