尝试设置数据验证,要求输入中包含“#”

时间:2019-12-24 06:28:11

标签: validation google-apps-script google-sheets google-sheets-formula

我正在尝试创建一个数据验证,该数据验证将要求一个单元格具有一个“#”,如果没有则将拒绝输入。我无法使用常规数据验证来做到这一点,因为人们必须能够粘贴到单元格中,该单元格通常会删除我设置的任何验证。我发现,如果我在设定范围内编写用于数据验证的脚本,即使将某些内容粘贴到单元格中,该脚本仍将运行。我已经做得足够远,可以标记不包含“#”但无法弄清楚如何拒绝不包含它的输入的单元格。这是我的位置:

function NoHasgtag() {
  var range = SpreadsheetApp.getActive().getRange("F7:F");
  var validation = SpreadsheetApp.newDataValidation().requireTextContains("#").build();

  range.setDataValidation(validation);
}

我还认为我可以使它与.requireFormulaSatisfied()一起使用,并且正在尝试这样做:

function NoHasgtag() {
  var range = SpreadsheetApp.getActive().getRange("F7:F");
  var validation = SpreadsheetApp.newDataValidation().requireFormulaSatisfied('ISNUMBER(SEARCH("#",range,1)')');

  range.setDataValidation(validation);
}

我得到了错误:

  

缺少),位于参数列表之后。 (第3行,文件“代码”)

我正在实时学习所有这些,而且我不确定自己在做什么,因此,如果有任何帮助或对我要去哪里的解释,将会非常有用!预先谢谢大家!

2 个答案:

答案 0 :(得分:0)

尝试:

cast

或:

function NoHasgtag() {
  var range = SpreadsheetApp.getActive().getRange("F7:F");
  var validation = SpreadsheetApp.newDataValidation().requireFormulaSatisfied('ISNUMBER(SEARCH("#",range,1))')');

  range.setDataValidation(validation);
}

答案 1 :(得分:0)

您的代码中的错误是:

var validation = SpreadsheetApp.newDataValidation().requireFormulaSatisfied('ISNUMBER(SEARCH("#",range,1)')');

应改为:

var validation = SpreadsheetApp.newDataValidation().requireFormulaSatisfied('ISNUMBER(SEARCH("#",range,1))');

(注意删除的单引号)

此外,此代码将不起作用,因为:

  1. 该公式无效。

  2. 将值粘贴到工作表上后,数据验证将被删除。

替代

您可以创建一个onEdit()触发器,以检查您的F7:F范围是否已被修改。如果是这样,则会创建一个新的数据验证。

由于要验证的内容非常简单,因此您实际上不需要自定义函数验证器。您可以简单地使用requireTextContains()数据验证方法,如下所示:

function onEdit(e) {
  var range = e.range;

  var lastRow = range.getRow() + range.getHeight() - 1;
  var firstCol = range.getColumn();
  var lastCol = firstCol + range.getWidth() - 1;

  if (range.getSheet().getName() == 'Sheet1' &&
      lastRow > 6 &&
      firstCol <= 6 &&
      lastCol >= 6) {
    var range = SpreadsheetApp.getActive().getRange("F7:F");
    var validation = SpreadsheetApp.newDataValidation().requireTextContains('#').build();

    range.setDataValidation(validation);
  }
}

您只需更改代码中的"Sheet1",使其与您要操作的工作表名称相匹配。