找回密码
 立即注册

QQ登录

只需一步,快速开始

樊小二丶

注册会员

15

主题

73

帖子

192

积分

注册会员

积分
192

[已处理] 单元格校验

樊小二丶
注册会员   /  发表于:2021-9-27 17:25  /   查看:5847  /  回复:18
10金币
单元格校验  如果当前的输入完切换时候校验 单元格校验没有通过校验的话 然后焦点在聚焦到上次修改的单元格再次进行数据修改校验
    获取到了 修改时候的事件 现在使用了这两个事件

image.png457083129.png

18 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-29 18:17:05
19#
14楼发你的demo,已经实现了自定义公式+验证失败时保持该单元格继续编辑无法跳出,这个目前已经满足你的功能需求,

你这边项目中目前遇到的问题,我们没有办法重现,肯定是没有办法帮您解决的

你可以自己再检查一下项目,如果还是无法解决的话,可以电话和我们沟通,
029- 88331988 -6032

也可以留下您的联系方式,我们来联系你


回复 使用道具 举报
樊小二丶
注册会员   /  发表于:2021-9-29 16:56:46
18#
Richard.Ma 发表于 2021-9-29 16:42
通过你描述的情况没法确定无法在进行校验的原因,请上传一个demo来说明目前遇到的问题,然后我们来帮您验 ...

不是我不还原 是因为 我在外面测试是可以的 但是添加到项目里 就 没有效果了
  1. //检验是否是合法数字
  2.     function checkIsLegalNumber(focusValue){
  3.         if(!isNaN(focusValue)){
  4.             //layer.msg('[ID: '+ data.id +'] ' + field + ' 字段更改值为:'+ util.escape(value));
  5.         }else {
  6.             if(focusValue === '-'){

  7.             } else {
  8.                 layer.msg('你所写入的是非法字符');

  9.                 return false;
  10.             }
  11.         }
  12.         return true;
  13.     }
复制代码

最开始的 判断是否是数字 然后利用找父级进行不让跳转的
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-29 16:42:09
17#
樊小二丶 发表于 2021-9-29 14:46
数据是从后台获取后放入到 多个 sheet 中 初始加载时候能看到数据校验 数据加载完成后 就无法在进行校验 ...

通过你描述的情况没法确定无法在进行校验的原因,请上传一个demo来说明目前遇到的问题,然后我们来帮您验证
回复 使用道具 举报
樊小二丶
注册会员   /  发表于:2021-9-29 16:42:03
16#
  1. //检验是否是合法数字
  2.     function checkIsLegalNumber(focusValue){
  3.         if(!isNaN(focusValue)){
  4.             //layer.msg('[ID: '+ data.id +'] ' + field + ' 字段更改值为:'+ util.escape(value));
  5.         }else {
  6.             if(focusValue === '-'){

  7.             } else {
  8.                 layer.msg('你所写入的是非法字符');

  9.                 return false;
  10.             }
  11.         }
  12.         return true;
  13.     }
复制代码



这种可以做嘛 这是单个单元格校验的 加上你上面说的

  1.                 sheet.bind(GC.Spread.Sheets.Events.LeaveCell, function (sender, args) {
  2.                     var validateerror=false;
  3.                     //在这里进对数据进行校验
  4.                     if(validateerror){
  5.                         args.cancel=true;
  6.                         
  7.                         sheet.startEdit(true);
  8.                     }
  9.                 });
复制代码


我试了 没有反应 原本的模态框也都没有了
回复 使用道具 举报
樊小二丶
注册会员   /  发表于:2021-9-29 14:46:58
15#
Richard.Ma 发表于 2021-9-29 12:13
之前没有和你沟通清楚。
你的第二种写法就是我们官方提供的自定义数据验证的办法,并不需要配合其他的事 ...

数据是从后台获取后放入到 多个 sheet 中 初始加载时候能看到数据校验 数据加载完成后 就无法在进行校验了  每个 sheet 都要进行同一种校验的
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-29 12:13:37
14#
本帖最后由 Richard.Ma 于 2021-9-29 12:14 编辑
樊小二丶 发表于 2021-9-29 11:20
这样也不调用啊  还有 写了一个 列的校验 也是没有效果出来  多个 sheet 的

之前没有和你沟通清楚。
你的第二种写法就是我们官方提供的自定义数据验证的办法,并不需要配合其他的事件来使用,还是楼上回复你的办法, 通过ValidationError事件中设置validationResult为retry即可实现不跳出当前数据验证错误的单元格
给你也提供了一个示例demo,自定义数据验证:偶数无法通过验证
dataV.html (6.27 KB, 下载次数: 226)
回复 使用道具 举报
樊小二丶
注册会员   /  发表于:2021-9-29 11:20:10
13#
Richard.Ma 发表于 2021-9-28 17:54
我不确定你自己写的方法是如何校验的,这里提供一个思路,在LeaveCell事件中进行校验,如果不符合要求的 ...
  1. //检查单元格值
  2.     function checkCellValue(){
  3.         sheet.bind(GC.Spread.Sheets.Events.LeaveCell, function (sender, args) {
  4.             var validateerror=false;
  5.             //在这里进对数据进行校验

  6.             console.log("----------------checkCellValue is trigger");
  7.             var sheetTemp = spreadAll.getActiveSheet();
  8.             var rowIndex = sheetTemp.getActiveRowIndex();
  9.             var columnIndex = sheetTemp.getActiveColumnIndex();

  10.             //sheetTemp.setActiveCell(trStr, targetIndex);
  11.             var cellValue = sheetTemp.getValue(rowIndex, columnIndex);

  12.             console.log("----------------cellValue is " + cellValue);
  13.             if(!checkIsLegalNumber(cellValue)){
  14.                 sheetTemp.setActiveCell(rowIndex, columnIndex);
  15.                 sheetTemp.startEdit(true);
  16.             }
  17.             if(validateerror){
  18.                 args.cancel=true;

  19.                 sheet.startEdit(true);
  20.             }
  21.         });


  22.     }
复制代码




这样也不调用啊  还有 写了一个 列的校验 也是没有效果出来  多个 sheet 的
  1. // 初始化表单
  2.     function initSpread(spread) {
  3.         spread.suspendPaint();

  4.         const sheet = spread.getActiveSheet();
  5.         // sheet.reset();
  6.         // 以下是添加数据校验的代码部分:
  7.         // 先设置高亮显示
  8.         spread.options.highlightInvalidData = true;
  9.         // 创建校验条件,自定义
  10.         var cCondition = new CustomerCondition();
  11.         var validator1 = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(cCondition);
  12.         validator1.ignoreBlank(false);
  13.         validator1.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom);

  14.         sheet.setDataValidator(-1,5, validator1);
  15.         spread.resumePaint();
  16.     }

  17.     // 用户自定义数据校验条件
  18.     function CustomerCondition(){
  19.         var self = this;
  20.         // 当前自定义条件名称
  21.         self.conditionType = "CustomerCondition";
  22.     }
  23.     CustomerCondition.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition();
  24.     CustomerCondition.prototype.evaluate = function(evaluator, baseRow, baseColumn, actualValue){
  25.         // 在此设置判断条件,非数判断
  26.         if(isNaN(parseFloat(actualValue))){
  27.             return false;
  28.         }else{
  29.             return true;
  30.         }
  31.     }
复制代码



单独运行就可以校验 放到工程里 多个 sheet 中 就没有效果了 也不进行校验
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-28 17:54:49
12#
本帖最后由 Richard.Ma 于 2021-9-29 17:37 编辑
樊小二丶 发表于 2021-9-28 17:41
有没有例子 看看呢 我们这个是自己写的方法进行检验的 不是用自带的方法进行检验的

我不确定你自己写的方法是如何校验的,如果不用我们的数据校验,只是要避免跳出当前单元格的话, 这里提供一个思路,在LeaveCell事件中进行判断,如果不符合要求的话,设置  args.cancel=true;sheet.startEdit(true);即可避免跳出该单元格,并继续编辑


  1.                 sheet.bind(GC.Spread.Sheets.Events.LeaveCell, function (sender, args) {
  2.                     var validateerror=false;
  3.                     //在这里进对数据进行校验
  4.                     if(validateerror){
  5.                         args.cancel=true;
  6.                         
  7.                         sheet.startEdit(true);
  8.                     }
  9.                 });
复制代码
回复 使用道具 举报
樊小二丶
注册会员   /  发表于:2021-9-28 17:41:39
11#
Richard.Ma 发表于 2021-9-28 17:24
如果是这个需求的话,Spread有提供一个数据验证后的操作选项:DataValidationResultnumber,将其设置为re ...

有没有例子 看看呢 我们这个是自己写的方法进行检验的 不是用自带的方法进行检验的
回复 使用道具 举报
樊小二丶
注册会员   /  发表于:2021-9-28 17:35:54
10#
Richard.Ma 发表于 2021-9-28 17:24
如果是这个需求的话,Spread有提供一个数据验证后的操作选项:DataValidationResultnumber,将其设置为re ...

我们用的是自己写的方法进行校验的 不是自带的方法
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部