找回密码
 立即注册

QQ登录

只需一步,快速开始

爱迪生

超级版主

55

主题

65

帖子

1400

积分

超级版主

Rank: 8Rank: 8

积分
1400
爱迪生
超级版主   /  发表于:2022-1-18 14:49  /   查看:2345  /  回复:0
本帖最后由 爱迪生 于 2022-1-18 15:07 编辑

用户在做协同编辑需求时,为了解决冲突等问题,需要在复制粘贴或剪切粘贴时,需要对粘贴数据的来源进行判断,以及当前粘贴对象是通过复制还是剪切操作获取的,如某些粘贴内容来自当前sheet,或者来自同一个工作簿的其他sheet,因此SpreadJSV15.0对复制粘贴功能进行了增强对ClipboardPasted和ClipboardPasting事件增加了三个参数:
1.fromSheet // 粘贴区域的源表
2.fromRange  //复制或剪切的数据区域的源区域
3.isCutting //用来表示是否为剪切操作

接下来详细介绍一下,如何使用这三个新增的参数:
1.先监听ClipboardPasted和ClipboardPasting事件,代码如下
  1. let designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("gc-designer-container"), config);
  2.                         let spread = designer.getWorkbook();
  3.                         let activeSheet = spread.getActiveSheet()
  4.                         spread.addSheet(1,new GC.Spread.Sheets.Worksheet("custom"));
  5.                         activeSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
  6.                                 console.log('ClipboardPasting',args);
  7.                         });
  8.                         activeSheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
  9.                                 console.log('ClipboardPasted',args);
  10.                         });
复制代码
2.在当前表单执行复制粘贴操作
image.png895585937.png
3.查看控制台:
image.png737061462.png
4.当进行剪切操作时,isCutting结果为true,查看控制台:
image.png354572448.png
利用新增的参数,可判断粘贴是通过复制还是粘贴,在协同编辑时对粘贴数据的源表通过fromSheet进行业务处理对于某些特殊情况的处理策略如下:
1.关于 fromSheet :
当spread执行外部副本时fromSheet为null
2.关于 fromRange:
当spread执行外部副本时fromRange为null
该属性仅用于复制或剪切范围。 在其他情况下将删除此属性。
复制多个范围时,spread会触发多个事件(旧策略),每个触发器都会发出相应的范围
3.关于 isCutting:
当 spread 执行外部复制或剪切时,isCutting 始终为 false。
执行内部复制或剪切时:
根据上下文菜单,Spread 只能在剪切范围后执行一次粘贴。 Designer 可以执行多次粘贴,这个bug尚未修复。
在剪切范围后第二次粘贴范围时,isCutting 属性为 false。
Spread 可以在剪切形状后执行多个粘贴形状,isCutting 属性始终为真。
Spread可以在切割浮动对象后执行多个浮动对象,isCutting属性始终为true。




0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部