找回密码
 立即注册

QQ登录

只需一步,快速开始

lihuiqian1991

初级会员

16

主题

35

帖子

450

积分

初级会员

积分
450
lihuiqian1991
初级会员   /  发表于:2018-6-19 16:38  /   查看:2938  /  回复:2
SpreadJS版本:V11

再现:
借用页面:http://demo.grapecity.com.cn/Spr ... /demos/spreadEvents
修改JS代码为:

  1.     $(document).ready(function () {
  2.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 3 });
  3.         initSpread(spread);
  4.     });

  5.     function initSpread(spread) {
  6.         var spreadNS = GC.Spread.Sheets;
  7.         var sd = dataSource;
  8.         var sheet = spread.getActiveSheet();
  9.         sheet.setValue(0, 0, 1);
  10.         sheet.setValue(0, 1, 2);
  11.         sheet.setFormula(0, 2, '=A1+B1');

  12.         spread.bind(spreadNS.Events.CellChanged, function (e, args) {
  13.             if(args.propertyName === 'value')
  14.                     console.log(e.type + JSON.stringify({col: args.col, row: args.row}));
  15.         });
  16.         spread.bind(spreadNS.Events.RangeChanged, function (e, args) {
  17.             console.log(e.type + JSON.stringify(args.changedCells));
  18.         });
  19.     };
复制代码
正常步骤:
1. 打开Console;
2. 修改A1单元格为2;
3. Console中打印:
  1. CellChanged{"col":0,"row":0}
  2. RangeChanged[{"row":0,"col":2}]
复制代码

异常步骤1:
1. 打开Console;
2. 从其他地方复制一个数字2,粘贴到单元格A1;
3. Console中打印:
  1. RangeChanged[{"row":0,"col":0}]
复制代码

异常步骤2:
1. 打开Console;
2. 选择单元格A1, 按下Delete键;
3. Console中打印:
  1. RangeChanged[{"row":0,"col":0}]
复制代码

总结:
如果更改单元格会引发CellChanged事件,那么由于更改单元格导致的公式变更会触发RangeChanged事件;
如果更改单元格会引发RangeChanged事件,那么由于更改单元格导致的公式变更不会触发RangeChanged事件;






2 个回复

倒序浏览
Helen
高级会员   /  发表于:2018-6-19 17:28:54
沙发
已经提交bug 259658,后续有任何进展将第一时间通知您。
回复 使用道具 举报
Helen
高级会员   /  发表于:2018-6-19 17:56:39
板凳
您尝试一下以下workaround看能否解决您的问题。
1. 在初始化完成之后,添加以下代码:
   sheet.clearPendingChanges();
2. 在RangeChanged里面获取脏数据,里面可以获取到粘贴和Delete引起的所有单元格变更。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部