使用自定义公式创建数据验证

时间:2019-01-30 13:40:33

标签: javascript google-apps-script google-sheets

我想使用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);
}

我希望结果是期望范围内正则表达式的数据验证。

3 个答案:

答案 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);