我想使用Google App脚本为Google表格中的单元格创建DataValidation,但是我找不到语法来创建用于验证的custum公式。
我的想法是创建代码以验证时间格式HH:MM。为此,我已经有一个正常的Regexp(功能CheckRegexp)
到目前为止,我找到的唯一有关此问题的文档是:https://developers.google.com/apps-script/reference/spreadsheet/data-validation-criteria
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getRange("E4");
var criteria = SpreadsheetApp.DataValidationCriteria.CUSTOM_FORMULA
//Custom formula CheckRegexp
var dv = SpreadsheetApp.newDataValidation().withCriteria(criteria, args).build();
cell.setDataValidation(dv);
}
function CheckRegexp(input) {
return /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/.test(input);
}
我希望结果是期望范围内正则表达式的数据验证。
答案 0 :(得分:0)
不可能将自定义公式(基于脚本)设置为数据验证标准。在这种情况下,{DataValidationCriteria.CUSTOM_FORMULA
)中的自定义公式是指通过嵌套内置公式来制作的自定义公式。
使用编辑触发器onEdit(e)
检查每个编辑是否满足条件,并清除单元格e.range.clear()
(如果不是)
使用这样的内置公式:
=REGEXMATCH(TO_TEXT(E4),"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$")
答案 1 :(得分:0)
另一种数据验证方法如下:
=AND(ISDATE(E4), TEXT(E4, "hh:mm")=TO_TEXT(E4))
REGEXMATCH函数也适用,但是对于某些人来说似乎不太可读。 顺便说一句,两种情况都不会拒绝错误的数字输入(我不知道为什么)。他们只将单元格标记为“无效:此单元格的内容违反了其验证规则”。
答案 2 :(得分:0)
为时已晚,但可能会帮助仍在寻找它的人。以下是通过脚本设置自定义公式验证的方法:
var range = SpreadsheetApp.getActive().getRange("A2");
var criteria = SpreadsheetApp.DataValidationCriteria.CUSTOM_FORMULA;
var args = ["=ISNUMBER(A2)"];
var val = SpreadsheetApp.newDataValidation().withCriteria(criteria,args);
val.setAllowInvalid(false);
val.setHelpText("Please enter valid number.");
range.setDataValidation(val);