本帖最后由 lynn512 于 2020-9-27 10:13 编辑
背景:使用SpreadJS时,小伙伴可能会有这样的需求:如何使单元格只能输入数字,当输入非数字时会有相应的提示呢? 思路:SpreadJS的数据验证功能提供基于公式的验证器,我们只需要结合正则表达式创建一个自定义函数,即可满足这个需求。
首先创建一个自定义函数,代码如下:
- 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 () {
- 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;
- }
- sheet.addCustomFunction(new RegExFunction());
复制代码 然后使用 createFormulaValidator 方法创建一个基于公式的验证器。将刚才的自定义函数传进去,函数的参数为只能输入数字的正则表达式。
- var dv8 = GC.Spread.Sheets.DataValidation.createFormulaValidator('REGEX("(^[\-0-9][0-9]*(.[0-9]+)?);
复制代码 设置highlightInvalidData 为true,这样的话当单元格中的数据无效时,就会显示一个红色的圆圈来进行提示。
- spread.options.highlightInvalidData = true;
复制代码 最后给指定的单元格设置这个公式验证器就好啦。
- sheet.getCell(0, 2).backColor("yellow").validator(dv8);
复制代码 我们来看一下效果:
输入数字时:
输入非数字时:
附件为本例的demo,您可以在demo中查看具体代码。
|
|