【问题标题】:Update cell values based on dependent drop down lists/multiple criteria根据相关下拉列表/多个条件更新单元格值
【发布时间】:2019-12-17 21:45:45
【问题描述】:

我已经根据script/tutorial 创建了一个带有相关下拉列表的 google 表格。 Here's a copy of the sheet I've created. 我的目标是使用下拉列表中可用的每个唯一值自动填充 C 列中的单元格,而不是像当前存在于主工作表的 C 列中那样创建一个下拉列表。我已通过VLOOKUP 尝试过此操作,但响应时出现错误,可能是由于缺乏验证或我不熟悉的其他某种形式的逻辑。如果修改了 A 列或 B 列选项,我也有兴趣在 C 列中清除 (clearContent) 中的填充选项,类似于当前脚本的工作方式。任何帮助解决这个问题将不胜感激。

【问题讨论】:

  • 抱歉,现在应该修复/公开

标签: google-apps-script google-sheets drop-down-menu


【解决方案1】:
  • 当更改“A”列和“B”列的下拉列表时,您希望将“选项”表中“C”列的相关值放到“C”列的单元格中.
    • 例如,当“A”列和“B”列的下拉列表为apple1_dormant时,您希望将Phytophthora collar rot, European red mite, Scale的值放入“C”列的单元格中。
  • 当“A”列和“B”列的下拉列表发生变化时,您想清除master工作表的“C”列。
  • 您希望通过 Google Apps 脚本使用 OnEdit 事件触发器来实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改点:

  • 在你的脚本中,我认为listToApplyapplySecondLevelValidation的功能可以使用。使用它,可以将值放入“C”列。
  • 关于清除“C”列的脚本,我觉得可以用ws.getRange(2, 3, ws.getLastRow() - 1, 1).clearContent();

修改脚本:

修改脚本时,请修改applyFirstLevelValidationapplySecondLevelValidation的功能如下。

function applyFirstLevelValidation(val,r){
    ws.getRange(2, 3, ws.getLastRow() - 1, 1).clearContent(); // Added

    if(val===""){
      ws.getRange(r,secondLevelColumn).clearContent();
      ws.getRange(r,secondLevelColumn).clearDataValidations();
      ws.getRange(r,thirdLevelColumn).clearContent();
      ws.getRange(r,thirdLevelColumn).clearDataValidations();
    } else {
      ws.getRange(r,secondLevelColumn).clearContent();
      ws.getRange(r,secondLevelColumn).clearDataValidations();
      ws.getRange(r,thirdLevelColumn).clearContent();
      ws.getRange(r,thirdLevelColumn).clearDataValidations();
      var filteredOptions = options.filter(function(o){return o[0] == val });
      var listToApply = filteredOptions.map(function(o){return o[1]})
      var cell = ws.getRange(r,secondLevelColumn);
      applyValidationToCell(listToApply,cell);
    }
}

function applySecondLevelValidation(val,r){
    ws.getRange(2, 3, ws.getLastRow() - 1, 1).clearContent(); // Added

    if(val===""){
      ws.getRange(r,thirdLevelColumn).clearContent();
      ws.getRange(r,thirdLevelColumn).clearDataValidations();
    } else {
      ws.getRange(r,thirdLevelColumn).clearContent();
      var firstLevelColValue = ws.getRange(r,firstLevelColumn).getValue();
      var filteredOptions = options.filter(function(o){return o[0] == firstLevelColValue && o[1] === val});
      var listToApply = filteredOptions.map(function(o){return [o[2]]}); // Modified
      ws.getRange(r,thirdLevelColumn,listToApply.length, 1).setValues(listToApply); // Modified
    }
}

注意:

  • 如果您只想将值放入单元格“C2”,请修改上述脚本如下。

    • 来自

      var listToApply = filteredOptions.map(function(o){return [o[2]]});
      ws.getRange(r,thirdLevelColumn,listToApply.length, 1).setValues(listToApply);
      
    • var listToApply = filteredOptions.map(function(o){return o[2]});
      ws.getRange(r,thirdLevelColumn).setValue(listToApply.join(","));
      

参考资料:

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

【讨论】:

  • @hortsystems 感谢您的回复。很高兴您的问题得到解决。
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2019-03-05
  • 2019-01-23
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多