如何基于另一个下拉列表中的值自动在下拉列表中设置值

时间:2020-03-21 20:59:20

标签: google-apps-script google-sheets

我有一个带有A到P列的googlesheet。B列(GROUP)是一个下拉列表,N列(EXECUTION STATUS)是一个下拉列表。我试图根据我在“执行状态”下拉列表中选择的值,自动为GROUP单元格设置一个特定值。

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

开发者 质量检查 1级支持 2级支持

执行状态在下拉列表中具有以下值:

通过 失败 未执行 封锁

这就是我想发生的事情: 如果我选择 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正在设置文本值。我正在尝试从下拉列表中设置一个值。我不确定。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

数据验证规则区分大写字母和小写字母。我认为这可能是您遇到问题的原因。因此,如果您的数据验证规则的值是大写字母的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

    }
  }
}

参考: