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

QQ登录

只需一步,快速开始

CloudJSTI

金牌服务用户

36

主题

98

帖子

332

积分

金牌服务用户

积分
332
CloudJSTI
金牌服务用户   /  发表于:2023-5-23 15:08  /   查看:927  /  回复:8
购买主题 本主题需向作者支付 150 金币 才能浏览

8 个回复

倒序浏览
JoestarXu
超级版主   /  发表于:2023-5-23 16:31:11
沙发
您好,这个需求可以用单元格状态去实现,单元格状态中可以针对dirty的cell指定特殊的style,请参考这个示例:https://demo.grapecity.com.cn/sp ... -cell-states/purejs

2.gif673071593.png
回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-5-24 09:24:36
板凳
这个应该不符合我的预期,我这边需要的是单元格的公式被改变或者删除,不是值被改变或者删除
回复 使用道具 举报
JoestarXu
超级版主   /  发表于:2023-5-24 11:46:24
地板
您好,了解到了您的具体需求,目前没有好的解决方案能够很好地实现您的需求,我这边只有一个思路,提供给您。

SpreadJS中有两个事件,CellChanged事件可以监听到单元格编辑公式和撤销的行为,RangeChanged事件能够监听到单元格删除公式的行为,您可以结合这两个事件去实现您的需求,我写了一个简单的Demo,您可以看一下,参考下述代码:

  1. window.onload = function () {
  2.   let designerConfig = JSON.parse(
  3.     JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig)
  4.   );

  5.   let designer = new GC.Spread.Sheets.Designer.Designer(
  6.     "gc-designer-container",
  7.     designerConfig
  8.   );

  9.   let spread = designer.getWorkbook();

  10.   let sheet = spread.getActiveSheet();

  11.   sheet.bind(GC.Spread.Sheets.Events.CellChanged, function (e, info) {
  12.     console.log(e);
  13.     console.log(info);
  14.     console.log("cell changed");
  15.     if (info.propertyName == "formula" && info.oldValue != null) {
  16.       sheet.getCell(info.row, info.col).backColor("red");
  17.     }

  18.     if (info.propertyName == "formula" && info.isUndo) {
  19.       sheet.getCell(info.row, info.col).backColor("");
  20.     }
  21.   });

  22.   sheet.setFormula(2, 2, "SUM(A2,B2)");
  23. };
复制代码


效果如下:

1.gif367503356.png
回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-5-24 14:43:42
5#
我看下了相关的事件,CellClick可以在用户单击单元格,触发这个事件,实际上单元格被选中的状态除了单击外,还可以通过键盘的上下左右键来触发(用户可能在单元格选中状态下直接按delete删除公式),但是我在文档中没有找到这个选中触发的事件,我现在需要用户在选中的时候,把当前单元格的公式存起来,这样用户在撤销公式更改的时候,我可以恢复之前的颜色
回复 使用道具 举报
JoestarXu
超级版主   /  发表于:2023-5-24 14:48:01
6#
CloudJSTI 发表于 2023-5-24 14:43
我看下了相关的事件,CellClick可以在用户单击单元格,触发这个事件,实际上单元格被选中的状态除了单击外 ...

您好,可以参考一下SelectionChange这个事件,这个事件可以监听到用户通过键盘进行上下左右选择的情况。

参考链接:https://demo.grapecity.com.cn/sp ... ts#selectionchanged
回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-5-24 16:22:45
7#
绑定了CellChanged方法,用户单击单元格选中后,直接按delete键,不会触发这个事件,RangeChanged同样也触发不了,这个有什么好的解决方案吗?
回复 使用道具 举报
JoestarXu
超级版主   /  发表于:2023-5-24 17:36:32
8#
CloudJSTI 发表于 2023-5-24 16:22
绑定了CellChanged方法,用户单击单元格选中后,直接按delete键,不会触发这个事件,RangeChanged同样也触 ...

您好,我在这边使用rangechanged事件是能够捕捉到delete键删除公式的行为的,如下图所示:

3.gif138976744.png
请参考这份代码:

  1. sheet.bind(GC.Spread.Sheets.Events.RangeChanged, function (sender, args) {
  2.         console.log("RangeChanged");
  3.   });
复制代码


回复 使用道具 举报
JoestarXu
超级版主   /  发表于:2023-5-25 10:43:15
9#
您好,请问您的问题解决了吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部