首页 > 解决方案 > 如何根据另一个下拉列表中的值自动设置下拉列表中的值

问题描述

我有一个包含 A - P 列的 googlesheet。B 列(GROUP)是一个下拉列表,N 列(执行状态)是一个下拉列表。我正在尝试根据我在 EXECUTION STATUS 下拉列表中选择的值自动在 GROUP 的单元格中设置特定值。

例如: GROUP 在下拉列表中具有以下值:

开发人员 QA 级别 1 支持 级别 2 支持

EXECUTION STATUS 在下拉列表中有以下值:

通过 失败 未执行 阻塞

这是我想要发生的事情:如果我选择FAILED作为 EXECUTION STATUS,我希望 GROUP 自动更改为DEVELOPER

这是我的功能:

function changeGroup(event)
{
  var ColN = 14;  // Column Number of "N"
  var changedRange = event.source.getActiveRange();
  if (changedRange.getColumn() == ColN) 
  {
    // An edit has occurred in Column N
    var state = changedRange.getValue();
    var Group = event.source.getActiveSheet().getRange(changedRange.getRow(),ColN-12);
    switch (state) 
    {
      case "FAILED":
        // Select DEVELOPER from dropdown list
        Group.setValue("Developer");
        break
      
    }
  }
}

我认为我的问题是Group.setValue("Developer")行。SetValue 正在设置一个文本值。我正在尝试从下拉列表中设置一个值。我不确定。有什么建议么?

标签: google-apps-scriptgoogle-sheets

解决方案


数据验证规则区分大小写字母。我认为这可能是您的问题的原因。因此,如果您的数据验证规则的值是DEVELOPER大写字母,请按如下方式使用。

Group.setValue("DEVELOPER");

笔记:

  • 在您的脚本中,我认为可以使用简单触发器的 OnEdit 事件触发器。但是从您的脚本来看,您似乎正在使用可安装的事件触发器。因此,请changeGroup再次确认该功能是否安装为可安装的 OnEdit 事件触发器。
  • 顺便说一下,如果要运行特定工作表的脚本,请if (changedRange.getColumn() == ColN)进行如下修改。

    if (changedRange.getColumn() == ColN && changedRange.getSheet().getSheetName() == "Sheet1")
    

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

添加:

在您的情况下,也可以使用简单触发器。那么如何测试以下脚本呢?当您使用此脚本时,请复制并粘贴以下脚本。然后,请更改“N”列的下拉列表。

function onEdit(event)  // <--- Modified
{
  var ColN = 14;  // Column Number of "N"
  var changedRange = event.source.getActiveRange();
  if (changedRange.getColumn() == ColN) 
  {
    // An edit has occurred in Column N
    var state = changedRange.getValue();
    var Group = event.source.getActiveSheet().getRange(changedRange.getRow(),ColN-12);
    switch (state) 
    {
      case "FAILED":
        // Select DEVELOPER from dropdown list
        Group.setValue("DEVELOPER");
        break

    }
  }
}

参考:


推荐阅读