尝试更新动态下拉代码以支持依赖同一列的两列

时间:2019-04-09 17:58:37

标签: google-apps-script

我正在尝试创建一个跟踪器,该跟踪器具有两个依赖于同一列的下拉列。例如,我为客户提供3种不同的服务,每种服务都有自己的支持类型和结果。选择一项服务后,我希望“支持”和“结果”列中填充与该服务相关的项目。

当前将填充一些结果选项,但不是全部。

我发现了并且正在尝试操纵本文How do you do dynamic / dependent drop downs in Google Sheets?中使用的代码。

我创建了第二部分以获取结果的下拉列表。这是我已经完成的工作的示例文档,https://docs.google.com/spreadsheets/d/1KmET4ilVqxGQwnIKGGo2hPFxWcQCtrXta-z8OHJT_5c/edit?usp=sharing

谢谢!

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var myRange = SpreadsheetApp.getActiveRange();
  var dvSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dropdowns");
  var option = new Array();
  var startCol = 0;

   // Dynamic dropown for Support Provided
  if(sheet.getName() == "Tracker" && myRange.getColumn() == 3 && myRange.getRow() > 1){  
    if(myRange.getValue() == "Credit"){
      startCol = 3;
    } else if(myRange.getValue() == "Legal"){
      startCol = 4;
    } else if(myRange.getValue() == "Housing"){
      startCol = 5;
    } else {
      startCol = 6
    }

  if(startCol > 0 && startCol < 6){
    option = dvSheet.getSheetValues(3,startCol,6,1);
    var dv = SpreadsheetApp.newDataValidation();
    dv.setAllowInvalid(false);  
    //dv.setHelpText("Some help text here");
    dv.requireValueInList(option, true);
    sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).setDataValidation(dv.build());
   }

  if(startCol == 6){
    sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).clearDataValidations();
  } 
  } 

     // Dynamic dropdown for Outcome
  if(sheet.getName() == "Tracker" && myRange.getColumn() == 3 && myRange.getRow() > 1){  
    if(myRange.getValue() == "Credit"){
      startCol = 7;
    } else if(myRange.getValue() == "Legal"){
      startCol = 8;
    } else if(myRange.getValue() == "Housing"){
      startCol = 9;
    } else {
      startCol = 10
    }

  if(startCol > 6 && startCol < 10){
    option = dvSheet.getSheetValues(6,startCol,10,1);
    var dv = SpreadsheetApp.newDataValidation();
    dv.setAllowInvalid(false);  
    //dv.setHelpText("Some help text here");
    dv.requireValueInList(option, true);
    sheet.getRange(myRange.getRow(),myRange.getColumn() + 2).setDataValidation(dv.build());
   }

  if(startCol == 10){
    sheet.getRange(myRange.getRow(),myRange.getColumn() + 2).clearDataValidations();
  } 
  } 


}

1 个答案:

答案 0 :(得分:0)

您为“结果”下拉列表的选项列表(代码行48)指定了错误的开始行(即“ 6”):

option = dvSheet.getSheetValues(6,startCol,10,1);

将“ 6”替换为“ 3”,下拉列表中将显示正确的选项列表。