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

问题描述 投票:0回答:3

我想使用谷歌应用程序脚本为谷歌表格中的单元格创建数据验证,但我找不到创建验证自定义公式的语法。

我的想法是创建一个代码来验证时间格式 HH:MM。对于这个问题,我已经有一个可用的正则表达式(函数 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);
}

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

javascript google-apps-script google-sheets
3个回答
1
投票

无法将自定义函数(基于javascript)设置为数据验证标准。这里的自定义公式(

DataValidationCriteria.CUSTOM_FORMULA
)是指通过嵌套内置公式来自定义制作的公式,这是可能的。

可能的解决方案:

  • 使用编辑触发器

    onEdit(e)
    检查每个编辑是否满足条件并清除单元格
    e.range.clear()
    ,如果不满足则OR

  • 使用像这样的内置公式:

      =REGEXMATCH(TO_TEXT(E4),"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$")
    

阅读:


0
投票

另一种数据验证方法如下:

=AND(ISDATE(E4), TEXT(E4, "hh:mm")=TO_TEXT(E4))

REGEXMATCH 函数也适用,但对于某些人来说可能可读性较差。 顺便说一句,这两种情况都不会拒绝错误的数字输入(我不知道为什么)。他们仅将单元格标记为“无效:此单元格的内容违反其验证规则”。


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);
© www.soinside.com 2019 - 2024. All rights reserved.