首页 > 解决方案 > 尝试设置需要在输入中包含“#”的数据验证

问题描述

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

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 行,文件“代码”)

我正在即时学习所有这些,我不确定我在做什么,所以任何关于我哪里出错的帮助或解释都会非常有帮助!谢谢大家!

标签: validationgoogle-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


您在代码中遇到的错误是:

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"代码,使其与您要操作的工作表名称相匹配。


推荐阅读