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

QQ登录

只需一步,快速开始

manabout13

注册会员

8

主题

21

帖子

75

积分

注册会员

积分
75
manabout13
注册会员   /  发表于:2025-7-2 21:17  /   查看:75  /  回复:5
如题:
valuechange、rangechange事件发生时,可否区分是用户触发的,还是代码、公式触发的?



5 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2025-7-3 12:03:03
沙发
您好!ValueChanged事件只能由UI操作触发,代码Worksheet:setValue()不触发该事件,对单元格输入公式也不触发该事件。所以,ValueChanged事件有响应时,可以认为是用户再界面上的UI操作。如下动图所示:



RangeChanegd能响应工具栏中的清除相关功能按钮,而且Worksheet:clear()也能触发,无法通过事件监听参数判断是UI操作还是代码行为触发了该事件,如下动图所示:



请问下您的实际需求是什么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
manabout13
注册会员   /  发表于:2025-7-3 13:56:51
板凳
我们目前是有一个模板,里面很多自定义的公式,大部分单元格不能修改,只有部分单元格可以修改。在实际使用时,SpreadJs根据模板初始化后,会根据公式将数据库中的数据查询出来填充到SpreadJs中,再手动填写部分单元格。
手动填写的单元格要求有角标标记出来,并且保留修改的历史记录。
我使用了RangeChanegd和ValueChange来监听单元格值的变化,并且记录修改历史。
下面几种情况涉及到单元格值的变化:
1、公式赋值导致单元格值变化(需要忽略,不记录修改历史)
2、复制(剪切复制)导致单元格值变化(需要记录修改历史)
3、拖动导致单元格变化(需要记录修改历史)

问题在于公式计算和复制粘贴带来的值变更都会触发RangeChange事件,无法区分
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-7-4 14:59:26
地板
manabout13 发表于 2025-7-3 13:56
我们目前是有一个模板,里面很多自定义的公式,大部分单元格不能修改,只有部分单元格可以修改。在实际使用 ...

1. 手动填写的单元格要求有角标标记出来。
绑定ValueChanged事件,监听到值变化的单元格,对该单元格设置折耳样式。

2. 公式赋值导致单元格值变化。
对单元格输入公式不触发ValueChanged事件,可以忽略。

3. 复制(剪切复制)导致单元格值变化。
监听ClipboardPasted事件,该事件监听参数中的cellRange即粘贴单元格区域,如下图所示:


4. 拖动导致单元格变化。
“拖动”指的是拖动填充吗?那可以绑定DragFillBlockCompleted事件,如下动图所示:


RangChanged事件不符合您的用途。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
manabout13
注册会员   /  发表于:2025-7-5 15:29:48
5#
非常感谢,已解决
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:7 天前
6#
manabout13 发表于 2025-7-5 15:29
非常感谢,已解决

不客气,那就结贴了。如遇新问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部