Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 设置一个;“子范围”;下拉列表中的值列表(数据验证),基于从Google工作表中的范围中选择的值_Validation_Google Apps Script_Google Sheets_Dropdown - Fatal编程技术网

Validation 设置一个;“子范围”;下拉列表中的值列表(数据验证),基于从Google工作表中的范围中选择的值

Validation 设置一个;“子范围”;下拉列表中的值列表(数据验证),基于从Google工作表中的范围中选择的值,validation,google-apps-script,google-sheets,dropdown,Validation,Google Apps Script,Google Sheets,Dropdown,光荣的互联网。我寻求你的帮助 我从OpenOffice导入了一个电子表格,“子范围”下拉列表(来自数据验证)被破坏了 基本上,列B=“Category”和列C=“Subcategory”——列B数据验证工作正常,填充标准类别下拉列表(它只是同一张表中的一个范围,在下面的示例D2:E2中)。但是,基于类别值,列C应该更新子类别的下拉列表 i、 e 行/列 D E 2. 果 蔬菜 3. 苹果 胡萝卜 4. 香蕉 洋葱 如果你不需要什么特别的东西,而且只需要一个细胞,那么这个公式就可以了。只需将范围更

光荣的互联网。我寻求你的帮助

我从OpenOffice导入了一个电子表格,“子范围”下拉列表(来自数据验证)被破坏了

基本上,列B=“Category”和列C=“Subcategory”——列B数据验证工作正常,填充标准类别下拉列表(它只是同一张表中的一个范围,在下面的示例D2:E2中)。但是,基于类别值,列C应该更新子类别的下拉列表

i、 e

行/列 D E 2. 果 蔬菜 3. 苹果 胡萝卜 4. 香蕉 洋葱
如果你不需要什么特别的东西,而且只需要一个细胞,那么这个公式就可以了。只需将范围更改为正确的图纸名称/范围,它就适用于您。公式获取从表1中选择的值,并检查其是否与水果或蔬菜匹配。如果它与这些匹配,则选择B3:B或C3:C。然后,我将数组限制为只达到B3:B中的计数……假设您的两列具有相同数量的元素。然后,我将此范围添加到表1中C2的数据验证中

=Array_Constrain(ArrayFormula(if(Sheet1!B2="Fruit",B3:B,if(Sheet1!B2="Vegetable",C3:C,""))),countif(B3:B,"<>"),1)

希望这有帮助!将来,通过提供的演示表演示示例会更容易。

请查看并编辑您的问题。如果您共享的工作表副本没有任何敏感数据,这将非常有用。您是否计划使用工作表功能或应用程序脚本来完成此操作?
 function onEdit(e) {
  
  var ss = e.source;
  var value = e.value;
  var activeSheet = ss.getSheetName();
  var range = e.range;
  var currentRow = range.getRow();
  var currentColumn = range.getColumn();
  
  
  if(activeSheet == 'Sheet1' && currentRow > 1 && currentColumn == 2 && value == 'Fruit') {
    
    //IF THE ROW IS > 1 AND THE COLUMN = 2 AND FRUIT WAS SELECTED, THEN IT WILL COPY THE VALIDATION RULES FROM 
    //SHEET2 D2.
    var fruitRule = ss.getSheetByName('Sheet2').getRange(2, 4).getDataValidation().copy();
    range.offset(0,1).setDataValidation(fruitRule);
    return;
    
  } else if(activeSheet == 'Sheet1' && currentRow > 1 && currentColumn == 2 && value == 'Vegetable') {
    
    //IF THE ROW IS > 1 AND THE COLUMN = 2 AND VEGETABLE WAS SELECTED, THEN IT WILL COPY THE VALIDATION RULES FROM 
    //SHEET2 E2.
    var vegRule = ss.getSheetByName('Sheet2').getRange(2, 5).getDataValidation().copy();
    range.offset(0,1).setDataValidation(vegRule);
    return;
    
  } else if(activeSheet == 'Sheet1' && currentRow > 1 && currentColumn == 2 && value == null) {
    //IF THE ROW IS > 1 AND THE COLUMN = 2 AND VALUE WAS DELETED, THEN IT WILL CLEAR THE VALIDATION RULES 
    //FROM THE ADJACENT CELL.
    range.offset(0,1).clearDataValidations();
    
  }
  
}