找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-9-26 18:25  /   查看:3741  /  回复:0
本帖最后由 lynn512 于 2020-9-27 10:13 编辑

背景:使用SpreadJS时,小伙伴可能会有这样的需求:如何使单元格只能输入数字,当输入非数字时会有相应的提示呢?  思路:SpreadJS的数据验证功能提供基于公式的验证器,我们只需要结合正则表达式创建一个自定义函数,即可满足这个需求。


首先创建一个自定义函数,代码如下:
  1. function RegExFunction() {
  2.             this.name = "REGEX";
  3.             this.maxArgs = 2;
  4.             this.minArgs = 2;
  5.             this.typeName = "RegExFunction";
  6.         }
  7.         RegExFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
  8.         RegExFunction.prototype.isContextSensitive = function () {
  9.             return true;
  10.         }
  11.         RegExFunction.prototype.evaluate = function () {
  12.             var context = arguments[0], value = context.source.getValue(context.row, context.column);
  13.             var reg = new RegExp(arguments[1]);
  14.             if (value) {
  15.                 return reg.test(value.toString());
  16.             }
  17.             return false;
  18.         }

  19.         sheet.addCustomFunction(new RegExFunction());
复制代码
然后使用 createFormulaValidator 方法创建一个基于公式的验证器。将刚才的自定义函数传进去,函数的参数为只能输入数字的正则表达式。
  1. var dv8 = GC.Spread.Sheets.DataValidation.createFormulaValidator('REGEX("(^[\-0-9][0-9]*(.[0-9]+)?);
复制代码
设置highlightInvalidData 为true,这样的话当单元格中的数据无效时,就会显示一个红色的圆圈来进行提示。
  1. spread.options.highlightInvalidData = true;
复制代码
最后给指定的单元格设置这个公式验证器就好啦。
  1. sheet.getCell(0, 2).backColor("yellow").validator(dv8);
复制代码
我们来看一下效果:
输入数字时:
image.png128523253.png
输入非数字时:
image.png128009642.png
附件为本例的demo,您可以在demo中查看具体代码。


mydemo.zip

10.81 MB, 下载次数: 185

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部