找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-18 10:22  /   查看:3773  /  回复:6
本帖最后由 Lynn.Dou 于 2023-2-16 09:53 编辑

背景:
在处理帖子的时候发现很多小伙伴都有这样的需求:
设置某一个单元格,在同时符合条件1、条件2......的前提下,才能允许输入,否则会提示输入无效。
看到这个需求,相信大家第一反应就是使用数据验证,
但是一个单元格只能设置一个数据验证,多条件下该如何设置呢?
SpreadJS数据验证 提供了基于公式的数据验证,所以我们可以利用公式来实现多条件的判断。

内容:
(举例说明更容易理解。)
在A1单元格可输入数字,要求数字最多为两位小数,且A1单元格的值需大于50小于100。
上述需求可拆分为3个条件:
条件1:A1数字 小数位数<=2
条件2:A1>50
条件3:A1<100

S搜索资料得知,使用公式  =LOG10(SUBSTITUTE(A1,".",)/A1)   可以获取A1值的位数。
结合if函数进行判断,公式如下:
=IF((LOG10(SUBSTITUTE(A1,".",)/A1
*(A1>50)*(A1<100),TRUE,FALSE)

再在A1单元格设置该公式验证,代码如下:

spread.options.highlightInvalidData = true;
//如果公式条件返回true,则公式验证器有效。
var dv = GC.Spread.Sheets.DataValidation.createFormulaValidator("IF((LOG10(SUBSTITUTE(A1,\".\",)/A1)<=2)*(A1>50)*(A1<100),TRUE,FALSE)");
sheet.setDataValidator(0, 0, 1, 1, dv, GC.Spread.Sheets.SheetArea.viewport);

输入66.666,验证不通过
输入110.23 验证不通过。
输入66.66,验证通过
image.png671893310.png

其余需求思路同理,在存在多个条件的情况下请思考如何利用公式进行验证。



多条件数据验证.html

3.41 KB, 下载次数: 263

6 个回复

倒序浏览
小弟弟
初级会员   /  发表于:2023-2-15 17:17:16
沙发
不好用啊这
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-15 18:17:29
板凳

您是遇到什么问题了呢?可以在求助中心发帖咨询,贴中详细描述下您的问题。
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-2-15 19:34:16
地板
Lynn.Dou 发表于 2023-2-15 18:17
您是遇到什么问题了呢?可以在求助中心发帖咨询,贴中详细描述下您的问题。

就是这个问题,大于50 小于100 并且带有2个小数,上面写的不好用
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-16 09:53:40
5#
代码中应包含转义符号,原代码已做更新,您重新参考下。
附件有测试demo,也可以直接下载测试。
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-2-16 13:55:39
6#
Lynn.Dou 发表于 2023-2-16 09:53
代码中应包含转义符号,原代码已做更新,您重新参考下。
附件有测试demo,也可以直接下载测试。

可以了。这个公式有没有把日期约束为yyyy,yyyy-mm或者yyyy-mm-dd这种格式的
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-16 17:42:48
7#
思路同上,您可以网上搜索下Excel函数如何实现约束日期格式。
或者使用正则表达式实现自定义函数。思路上可以参考下方链接:
https://gcdn.grapecity.com.cn/fo ... 7&fromuid=59119
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部