我正在尝试创建一个数据验证,该数据验证将要求一个单元格具有一个“#”,如果没有则将拒绝输入。我无法使用常规数据验证来做到这一点,因为人们必须能够粘贴到单元格中,该单元格通常会删除我设置的任何验证。我发现,如果我在设定范围内编写用于数据验证的脚本,即使将某些内容粘贴到单元格中,该脚本仍将运行。我已经做得足够远,可以标记不包含“#”但无法弄清楚如何拒绝不包含它的输入的单元格。这是我的位置:
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行,文件“代码”)
我正在实时学习所有这些,而且我不确定自己在做什么,因此,如果有任何帮助或对我要去哪里的解释,将会非常有用!预先谢谢大家!
答案 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))');
(注意删除的单引号)
此外,此代码将不起作用,因为:
该公式无效。
将值粘贴到工作表上后,数据验证将被删除。
您可以创建一个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"
,使其与您要操作的工作表名称相匹配。