找回密码
 立即注册

QQ登录

只需一步,快速开始

1025965116

注册会员

5

主题

18

帖子

53

积分

注册会员

积分
53
1025965116
注册会员   /  发表于:2018-9-20 09:43  /   查看:3477  /  回复:7
在输入时已经加了校验只允许输入数字,怎么能限制复制粘贴时只能粘贴数字 只允许粘贴数字.png

7 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-9-20 13:40:40
沙发
您好,您说的这个需求可以用事件解决,我贴一个简单的Demo:
  1. $(document).ready(function () {
  2.     var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));

  3.     spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (s, e) {
  4.         // 获取此次粘贴操作的文字内容
  5.         var pasteData = e.pasteData.text;
  6.         // 分割每个单元格内容
  7.         var dataArr = pasteData.trim().split("\n");
  8.         for (var i=0; i<dataArr.length; i++) {
  9.             var text = dataArr[i].trim();
  10.             if(text.length === 0){
  11.                 continue;
  12.             }
  13.             // 判断是否为数字
  14.             if(!/^[0-9]+$/.test(text.trim())){
  15.                 alert("请输入数字!");
  16.                 // 非数字取消粘贴操作
  17.                 e.cancel = true;
  18.                 return;
  19.             }
  20.         }

  21.     });

  22. });
复制代码
回复 使用道具 举报
1025965116
注册会员   /  发表于:2018-9-20 14:00:24
板凳
KevinChen 发表于 2018-9-20 13:40
您好,您说的这个需求可以用事件解决,我贴一个简单的Demo:

能不能只对其中几列加这个限制
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-9-20 14:51:36
地板
可以,首先事件中可以获取到粘贴区域range,方法是
  1. var pasteRange = e.cellRange;
复制代码

然后只需要在事件中加判断即可,加判断的方法很多,我提供几个思路:

1、最简单的:您表格如果设置为不可改,那只需要指定行、列的范围,判断单元格在这个范围内即可;

2、为单元格添加validator,判断粘贴的单元格的validator是否是验证数字;
https://demo.grapecity.com.cn/Sp ... /basicDataValidator

3、为指定单元格添加tag,含tag的单元格进行判断。
https://demo.grapecity.com.cn/Sp ... le/#/demos/tagBasic
回复 使用道具 举报
1025965116
注册会员   /  发表于:2018-9-28 10:24:18
5#
KevinChen 发表于 2018-9-20 14:51
可以,首先事件中可以获取到粘贴区域range,方法是

然后只需要在事件中加判断即可,加判断的方法很多, ...

能不能再详细说下validator的方式呢?怎么校验某个单元格的粘贴值是否为数字呢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-9-28 14:42:57
6#
您好,其实针对您的这个需求,使用validator不如直接使用js的isNaN()方法来判断是否非数更方便,

添加数字的validator可以参考API:

http://help.grapecity.com/spread ... umberValidator.html
回复 使用道具 举报
1025965116
注册会员   /  发表于:2018-9-28 17:13:23
7#
KevinChen 发表于 2018-9-28 14:42
您好,其实针对您的这个需求,使用validator不如直接使用js的isNaN()方法来判断是否非数更方便,

添加数 ...

怎么获取这个单元格粘贴过来的value呢,加上校验后校验是不是在粘贴后进行的?
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-9-28 17:46:53
8#
您好,添加数字校验的方法可以参考api:

http://help.grapecity.com/spread ... umberValidator.html

数字校验可以配置对单元格中数字大小的判断,传参列表参考api:

http://help.grapecity.com/spread ... risonOperators.html

然后您在粘贴事件ClipboardPasting中可以调用sheet.isValid(row, col, value);的方法来判断是否符合您设置的validator条件,api:
http://help.grapecity.com/spread ... ksheet~isValid.html

对于您的需求,如果只判断粘贴的内容中是否含有非数,那完全不需要设置validator,只需要在ClipboardPasting中更改一个条件判断就可以了,如下:

  1. $(document).ready(function () {
  2.     var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));



  3.     spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (s, e) {
  4.         // 获取此次粘贴操作的文字内容
  5.         var pasteData = e.pasteData.text;
  6.         // 分割每个单元格内容
  7.         var dataArr = pasteData.trim().split("\n");
  8.         for (var i=0; i<dataArr.length; i++) {
  9.             var text = dataArr[i].trim();
  10.             if(text.length === 0){
  11.                 continue;
  12.             }
  13.             // 判断是否为数字
  14.             if(isNaN(text.trim())){
  15.                 alert("请输入数字!");
  16.                 // 非数字取消粘贴操作
  17.                 e.cancel = true;
  18.                 return;
  19.             }
  20.         }

  21.     });

  22. });
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部