请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

大Vi

高级会员

189

主题

415

帖子

1326

积分

高级会员

积分
1326
大Vi
高级会员   /  发表于:2025-4-2 10:21  /   查看:146  /  回复:5
1金币
本帖最后由 大Vi 于 2025-4-2 10:24 编辑

场景:每列有不同的数据验证
1、有没有一键校验所有单元格的方法?我需要知道是不是有单元格校验是错误的,然后阻止提交,比如在提交时,需要校验所有单元格,包括非空和数据正确性
2、非空校验:怎么做到只在一键校验所有单元格才校验这个,其他情况不需要校验
validator.ignoreBlank(false); // 非空

3、为什么这个errorMessage的错误提示没出来,showErrorMessage没有作用
  1. var dv1 = GC.Spread.Sheets.DataValidation.createTextLengthValidator(
  2.                 GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators
  3.                     .lessThanOrEqualsTo,
  4.                 "5",
  5.                 null
  6.             );
  7.             dv1.showInputMessage(true);
  8.             dv1.inputMessage("只能输入5字以内");
  9.             dv1.inputTitle("提示");
  10.             dv1.showErrorMessage(true);
  11.             dv1.errorMessage("Incorrect Value");
  12.             dv1.errorStyle(GC.Spread.Sheets.DataValidation.ErrorStyle.stop);
  13.             sheet.setDataValidator(1, 3, dv1);
复制代码




最佳答案

查看完整内容

问题1:每个数据验证是独立的,无法集中控制。在sheet中通过UI输入数据,单元格的数据验证器会自动计算验证。在代码中通过Worksheet:setValue()对单元格填充数据后,也能触发数据验证器的工作流程。 在提交之前,无论数据由人工通过UI填充或者在代码中填充,均能触发数据验证器的工作流程。如果取消如高亮显示这样的错误结果提示效果,数据录入人员便无法从界面上感知到数据是否正确,即可在代码中对sheet中的每个数据验证器通 ...

5 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2025-4-2 10:21:17
来自 4#
本帖最后由 Wilson.Zhang 于 2025-4-3 11:14 编辑
大Vi 发表于 2025-4-2 17:29
问题1:所有不能一次性获取所有单元格的验证结果吗?你这个是要一个个单元格循环还手动拿值再判断一次, ...

问题1:每个数据验证是独立的,无法集中控制。在sheet中通过UI输入数据,单元格的数据验证器会自动计算验证。在代码中通过Worksheet:setValue()对单元格填充数据后,也能触发数据验证器的工作流程。
在提交之前,无论数据由人工通过UI填充或者在代码中填充,均能触发数据验证器的工作流程。如果取消如高亮显示这样的错误结果提示效果,数据录入人员便无法从界面上感知到数据是否正确,即可在代码中对sheet中的每个数据验证器通过DefaultDataValidator:isValid()校验数据正确性。

问题3:如果您使用的是没有顶部工具栏的纯sheet组件,那么没有默认的提示信息对话框,这些内容仅在Designer中集成了。
您可以通过监听ValidationError事件发生时判断数据验证器是否允许显示错误信息,然后结合confirm支持错误信息提示,自定义弹框效果差一些。因为Designer在数据验证结果错误时拦截该结果,弹出对话框显示错误提示信息,confirm函数同样在浏览器中拦截主线程以显示提示信息。

如果要自定义弹框,由于无法拦截数据验证的错误结果,在弹出自定义弹框时单元格已经被高亮红圈显示了,在点击确定按钮后也不会消除,因为此时单元格的数据验证结果还是上一次的错误结果,只有重新输入符合数据验证规则的正确数据后才能正常,如下动图所示:
数据验证自定义弹框生效.gif

如果您可以接受上图效果,那就可以在点击自定义弹框中的确定按钮后执行如下操作:
1. 通过Worksheet:setActiveCell()重新设置数据验证单元格为当前活动单元格;
2. Worksheet:startEdit()对活动单元格启动编辑。

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-2 14:48:04
2#
您好!对您提出的三个问题一一分析验证,给您同步结论如下。

问题1:DefaultDataValidator:isValid()能够判断单元格数据是否符合数据验证规则,evaluator参数为当前sheet,row、col为检查目标单元格的行列索引,actual为检查目标值,可以参考如下代码:
  1. var dataValidator = sheet.getDataValidator(0, 0);
  2. dataValidator.isValid(sheet, 0, 0, sheet.getValue(0, 0));
复制代码

isValid方法根据数据验证规则校验,非空ignoreBlank也是数据验证规则的一部分。

问题2:如果仅在一键校验所有单元格时才需要校验是否非空,那可以在此时对所有数据验证器设置不允许非空,然后数据验证规则就能够兼顾校验非空。之后再设置为允许非空,当并非一键校验所有单元格时即可忽略空单元格为错误单元格。

问题3:经测试,验证您提供的代码片段可以对错误验证结果弹出提示对话框,便显示自定义的错误提示信息,如下图所示:
数据验证errorStyle.png981358947.png
回复 使用道具 举报
大Vi
高级会员   /  发表于:2025-4-2 17:29:15
3#
Wilson.Zhang 发表于 2025-4-2 14:48
您好!对您提出的三个问题一一分析验证,给您同步结论如下。

问题1:DefaultDataValidator:isValid()能 ...

问题1:所有不能一次性获取所有单元格的验证结果吗?你这个是要一个个单元格循环还手动拿值再判断一次,本身页面只要输入过内容如果有错误,页面已经有错误提示了,我只是想要用代码获取现在的表格有没有校验错误的单元格存在。

问题三:我的表格只有sheet这部分,难道是只用这块功能就没有那个弹框吗? image.png718541259.png
回复 使用道具 举报
大Vi
高级会员   /  发表于:2025-4-3 11:27:12
5#
Wilson.Zhang 发表于 2025-4-3 10:10
问题1:每个数据验证是独立的,无法集中控制。在sheet中通过UI输入数据,单元格的数据验证器会自动计算验 ...

问题2,如何在数据验证已经定义后单独再加上是否忽视非空呢?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-3 13:34:26
6#
大Vi 发表于 2025-4-3 11:27
问题2,如何在数据验证已经定义后单独再加上是否忽视非空呢?

可以通过DefaultDataValidator:ignoreBlank()对数据验证器设置是否忽略空值,对应UI操作如下图所示:
1743658460954.jpg186410216.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部