找回密码
 立即注册

QQ登录

只需一步,快速开始

tyasrio

注册会员

4

主题

11

帖子

132

积分

注册会员

积分
132
最新发帖
tyasrio
注册会员   /  发表于:2018-10-10 10:49  /   查看:2743  /  回复:4
由于一个单元格可能会有复数个validator(DB存储),通过图片的方式对单元格进行多次检验。validator有如下几种:
1.单元格A == 单元格B + 单元格C + ..
2.单元格A <> 0
3.单元格A <= 单元格B
现在结果是每次第三种都会抱错。

SHEET_VALIDATOR的map里根据sheetname做key,value是以 (坐标为key,DB信息为value) 的value
两个比较的单元格数据使用cell.value() 查看结果是
单元格A
spread.getActiveSheet().getCell(14 ,4).value()
"264678"
单元格B
spread.getActiveSheet().getCell(16 ,4).value()
1376242

無題.png
無題2.png

3 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-10 11:53:25
沙发
您好,您这个案例相对比较复杂,

我按照您描述的需求写了一个Demo,尽量还原了您描述的逻辑,

您先运行参考一下,对比一下自己的业务逻辑看看哪里出了问题,

Demo见附件。

MultiValidator.html

3.04 KB, 下载次数: 83

回复 使用道具 举报
tyasrio
注册会员   /  发表于:2018-10-10 12:31:07
板凳
KevinChen 发表于 2018-10-10 11:53
您好,您这个案例相对比较复杂,

我按照您描述的需求写了一个Demo,尽量还原了您描述的逻辑,

谢谢你的回复。

>vad.isValid( current_sheet, rowIndex, colIndex, parseInt(cell.value()))
对于这个函数,第4个参数可以理解为随意的值?毕竟formula中和这个cell毫无关联。
我之间的想法是以为对于一个cell,从cell的validator()获得它的验证器,再通过
这个验证器传入cell自身的值。

结论:
  两个cell的值一个是number一个是string,所以比较起来永远出错。
  我应该在赋值的时候进行parseInt(实际修改后确实是这样。。)


回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-10 13:56:14
地板
对,您定义的公式与cell确实没有关联,所以这个cell的值对isValid的结果没有影响。

SpreadJS每个单元格只能绑定单个validator,所以您这样实现多重校验是完全OK的。

getValue方法返回值与cell的值类型确实相关,很高兴问题解决了,如果有别的问题,欢迎发新帖。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部