找回密码
 立即注册

QQ登录

只需一步,快速开始

行云数据
金牌服务用户   /  发表于:2021-1-18 21:10  /   查看:2127  /  回复:7
如何通过spreadjs创建Validator来验证数据的必填;比如:E列和G列填写有值后,H列必须填写 image.png269071349.png
当然也通过其他思虑来实现,望能予以支持!!

demo.xlsx

10.35 KB, 下载次数: 28

7 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-19 09:25:14
沙发
您好,请问您的期待效果是什么呢?
是 填写每行的时候实时提示数据必填?
还是 填写完所有数据,最后提交的时候再提示呢?
建议您详细的描述您的需求,这边好进一步的解决此问题。
回复 使用道具 举报
行云数据
金牌服务用户   /  发表于:2021-1-19 09:44:09
板凳
填写每行的时候实时提示数据必填,比如用户输入了E3和G3后,用户没有填写H3,而是非本行其他操作时候,提示H3必填,且将鼠标焦点移动到H3列
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-19 10:42:39
地板
需求收到,这边正在调研解决方案,预计下午给您回复。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-19 12:22:04
5#
目前提供的解决方案是使用 数据验证-公式验证 来实现 提示输入 的需求。
“而是非本行其他操作时候,提示H3必填,且将鼠标焦点移动到H3列”
这边调研了下,引号内需求实现起来较为复杂,综合考虑建议只使用数据验证即可。
您可以参考附件的demo。
核心代码如下:
  1. spread.options.highlightInvalidData = true;
  2.             //公式验证器,公式内指定列
  3.             var dv = GC.Spread.Sheets.DataValidation.createFormulaValidator("=OR(NOT(ISBLANK(C1)),ISBLANK(A1),ISBLANK(B1))");
  4.             dv.showInputMessage(true);
  5.             dv.inputMessage("值不能为空");
  6.             dv.ignoreBlank(false);
  7.             dv.inputTitle("提示:");
  8.             //给一定区域内单元格设置数据验证
  9.             sheet.setDataValidator(0,2,10,1,dv);
复制代码






数据验证-提示输入.zip

11.58 MB, 下载次数: 34

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-21 15:10:10
6#
通过进一步的沟通明确了需求:
1、A列B列均不为空时,进入C列,提示输入。
2、C列值不满足条件时,不允许退出编辑状态,强制输入直至正确值。
希望通过监听 valueChanged 事件来实现。


目前两个需求已实现,具体代码您可以参考附件的demo。
需要注意的是,如果存在 多个单元格(区域单元格) 的复制粘贴、或拖拽移动时,该demo未监听相应的事件,还需要您根据业务需求自行来设计。
本demo只是起到示例作用。
建议先整理出完整的思路,这边可以根据您设计的方案协助提供相应信息。


ValueChanged事件验证值不正确.zip

11.58 MB, 下载次数: 24

回复 使用道具 举报
行云数据
金牌服务用户   /  发表于:2021-1-21 21:59:05
7#
本帖最后由 行云数据 于 2021-1-21 22:10 编辑

非常感谢支持,我这边验证了,如果C列是个序列值,验证必填有点困难,还未继续予以帮忙看看,详见demo

ValueChanged事件验证C列序列值必填.zip

11.98 MB, 下载次数: 33

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-22 09:37:33
8#
本帖最后由 lynn512 于 2021-1-22 16:45 编辑

这边看了下demo,结合您所说的”如果C列是个序列值“,您的需求已经与  之前所说的需求(见下)  发生了变化。
1、A列B列均不为空时,进入C列,提示输入。
2、C列值不满足条件时,不允许退出编辑状态,强制输入直至正确值。



您是否已经明确了自己的需求呢?
按照之前的沟通,是希望C列处于编辑状态,但如果是个序列值的话,就与之前的需求产生差异了。这是我们前期沟通不到位的问题。
建议您先明确自己的需求详细的描述一个需求效果,不然需求一直在变动,很影响解决问题的效率。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部