【问题标题】:Is there a way to mass input data validation in google sheets有没有办法在谷歌表格中批量输入数据验证
【发布时间】:2018-02-15 21:21:46
【问题描述】:

我正在尝试创建一个下拉菜单,其内容基于同一行中的另一个单元格。例如,如果 A1 = 'yes',那么 B2 中的下拉菜单会为您提供“yes”或“no”的选项。我可以做到这一点,我已经设置了列表数据并进行了编码工作。问题是我需要在 4 张不同的纸上做 155 次。有没有比右键单击并编辑每个单元格的数据验证规则更快的方法。这是我正在处理的测试表的链接:

https://docs.google.com/spreadsheets/d/1rd_Ig_wpof9R_L0IiA1aZ9syO7BWxb6jvBhPqG8Jmm4/edit?usp=sharing

【问题讨论】:

    标签: validation google-sheets


    【解决方案1】:

    您可以使用脚本as documented here 设置数据验证规则。这是starting with Apps scripts 的参考。

    我写了一个函数,它与你描述的差不多。它适用于当前电子表格中工作表“9 年级”的范围 B3:B157。对于它们中的每一个,它将验证规则设置为:同一行中的值,工作表“列表数据”的 B 和 C 列。与

    的行
     ....... = listData.getRange(i+3, 2, 1, 2);
    

    如果验证的源范围不同,则需要修改。这里的参数是:起始行、起始列、行数、列数。因此,从第二个开始的 2 列,在第 i+3 行中。

    function setRules() { 
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var grade = ss.getSheetByName('9th Grade');
      var listData = ss.getSheetByName('List Data');
      var range = grade.getRange('B3:B157');
      var rules = range.getDataValidations();
      for (var i = 0; i < rules.length; i++) {
        var sourceRange = listData.getRange(i+3, 2, 1, 2);
        rules[i][0] = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build();
      }
      range.setDataValidations(rules);
    }
    

    【讨论】:

    • 我在第 8 行不断收到“TypeError: Cannot call method "getRange" of null. (line 8, file "Code")"。关于原因有什么想法吗?
    • 消息说 listData 为空,而不是工作表指针。它应该是在var listData = ss.getSheetByName('List Data'); 线上获得的——这引发了一个问题,即您的电子表格是否有一个名为“列表数据”的工作表。
    • 非常感谢您的出色工作!!
    【解决方案2】:

    出于不同的原因,我遇到了这个问题:“只需在一列中进行大量 DataValidation 副本(或更新)”。感谢 user3717023 给我带来了光明。 我希望这可以帮助某人进行这种简化。

    function setRules() { 
      //select spreadsheet
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var leads = ss.getSheetByName('Leads');
    
      //Select correct Datavalidation
      var rangeNewDataValidation = leads.getRange('M2:M2');
      var rule = rangeNewDataValidation.getDataValidations();
    
      //Copy (or Update) Datavalidation in a specific (13 or 'M') column
      var newRule = rule[0][0].copy();
      Logger.log(leads.getMaxRows())
      for( var i=3; i <= leads.getMaxRows(); i++){
        var range = leads.getRange(i, 13);
        range.setDataValidations([[newRule.build()]]);
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多