【问题标题】:Google spreadsheet list validation values must vary per rowGoogle 电子表格列表验证值必须每行有所不同
【发布时间】:2015-03-03 16:14:41
【问题描述】:

我有一个包含两列的电子表格: A 列包含电子邮件地址 B 列包含状态 - 有效状态的下拉列表,因此用户不必手动输入它们。

每行: 如果在 A 列中输入了有效的电子邮件地址 --> B 列中的状态可以从下拉列表中选择为 s1 或 s2。

如果没有在 A 列中输入了有效的电子邮件地址 --> B 列中的状态可以从下拉列表中选择为 s3 或 s4。

显然,下拉列表中的值选项因行而异。 这如何实现?

要修改单个下拉值列表,我可以使用如下公式:

=ARRAYFORMULA(if(isemail(C3),F2:F12,F1))

但结果列表对于所有行

是不变的

谢谢!

【问题讨论】:

    标签: javascript validation google-sheets


    【解决方案1】:

    这个脚本应该可以解决问题。这会运行页面上任何内容的“onEdit”,因此每当输入新的用户电子邮件时,它将根据 C 列的真/假值自动更新每行 B 列中下拉菜单的验证(有一个简单的=isEmail() 公式)

    设置您的页面:

    我假设你有一个标题行,这个脚本从第 2 行开始循环:

    您有相同的 A 列和 B 列,但在 C 列的每一行中编写一个简单的 =isEmail() 公式,该公式将 A 列中的值测试为真/假。

    然后对于下拉菜单,在 D 列中列出 S1 和 S2 值,在 E 列中列出您的 S3 和 S4 值。我想你可以在下面的这个脚本中看到测试是如何工作的,让我知道这是否有效!如果需要,我可以提供我的页面设置的屏幕截图。

    function onEdit(e){
    
    var ss = e.source;
    var sheet = ss.getActiveSheet();
    
    //values will be a 2D array of all the data on the page, in the exact dimensions of that data
    var values = sheet.getDataRange().getValues();
    var menu_range;
    
    //this scripts assumes a header row, so the loop starts at 1 instead of 0
    
    for(var i = 1; i < values.length; i++) {
    
        var isEmail = values[i][2];
        var cell = sheet.getRange(i + 1, 2, 1, 1);
    
        if(isEmail) {
    
            menu_range = SpreadsheetApp.getActive().getRange('D2:D3');
    
        } else {
    
            menu_range = SpreadsheetApp.getActive().getRange('E2:E3');
    
        }
    
        var rule = SpreadsheetApp.newDataValidation().requireValueInRange(menu_range).build();
        cell.setDataValidation(rule);
    
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多