本帖最后由 Fiooona 于 2020-9-21 15:15 编辑
当你做好一个表格,发给其他人去填写,最麻烦的是每个人填写的内容格式各种各样,这时难道只能一个个的再去修改?在Excel 中有数据验证的功能,同样,SpreadJS这一款表格控件,高度还原Excel功能,在V11版本后也可以设置数据验证。想要限制用户的输入内容、格式,阻止或者提示用户输入错误的信息,可以给单元格上设置验证器。 SpreadJS提供了内置的六款验证器,本文一一实现了这六款验证器的基本用法,及一些相关自定义的实现。 基于列表的验证器:这种验证器是提供了一个单选下拉的一个列表,限制用户仅可以从已知的列表中去选择,除列表外的数据被填充进单元格会被认为是非法数据。 学习指南中实现的例子就是使用了列表验证器,可以参考。 基于日期的验证器:这种验证器用与验证单元格的日期是否在限定的范围中,示例中实现的效果是只能选择日期12/31/2012 到12/31/2013 直接的日期,核心代码: - var dv5 = GC.Spread.Sheets.DataValidation.createDateValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.between, new Date(2012, 11, 31), new Date(2013, 11, 31));
-
复制代码基于文本长度的验证器:顾名思义,这种验证器实现的是验证文本长度,例如要实现限制输入长度4-20: - var dv4 = GC.Spread.Sheets.DataValidation.createTextLengthValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.greaterThan, "4", "20");
-
复制代码基于数字的验证器:这个验证器用于验证数字的大小、范围、是否在某一范围内。例如实现输入数字为5-20之间: - var dv = GC.Spread.Sheets.DataValidation.createNumberValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.between, "5", "20", true);
复制代码基于公式的验证器:次类验证器中可以验证单元格的值是否符合某一公式,例如实现输入的内容大于C2单元格的内容: - var dv7 = GC.Spread.Sheets.DataValidation.createFormulaValidator("D19>C2");
复制代码基于公式列表的验证器:列表的内容可以是公式选择一片区域的内容,这个验证器是一种列表验证器,列表的内容可以是公式引用的内容,示例中D18单元格输入的内容只能是 $C$1C$3单元格中的内容:- var dv6 = GC.Spread.Sheets.DataValidation.createFormulaListValidator("$C$1/:$C$3");
复制代码以上是六种SpreadJS自带的验证器,每一个单元格中仅可设置一种验证器,如果想要在一个单元格中限定多个条件的验证该如何实现呢?例如想要实现数字格式,并且限定有小数的话仅能输入四位小数。 可以用自定义公式数据验证来实现:创建一个正则匹配的自定义函数,可以匹配数字并且如果有小数仅能有四位以内的小数: - var dv8 = GC.Spread.Sheets.DataValidation.createFormulaValidator('REGEX("^([1-9]\\d{0,15}|0)(\\.\\d{1,4})?[ DISCUZ_CODE_5 ]quot;)');
- function RegExFunction() {
- this.name = "REGEX";
- this.maxArgs = 2;
- this.minArgs = 2;
- this.typeName = "RegExFunction";
- }
- RegExFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
- RegExFunction.prototype.isContextSensitive = function () {
- return true;
- }
- RegExFunction.prototype.evaluate = function () {
- debugger
- var context = arguments[0], value = context.source.getValue(context.row, context.column);
- var reg = new RegExp(arguments[1]);
- if (value) {
- return reg.test(value.toString());
- }
- return false;
- }
复制代码常见问题: 相关文章:自定义数据验证:
|