爱迪生 发表于 2022-1-18 14:49:48

SpreadJSV15.0新特新解密-工作表-剪贴板相关事件增强

本帖最后由 爱迪生 于 2022-1-18 15:07 编辑

用户在做协同编辑需求时,为了解决冲突等问题,需要在复制粘贴或剪切粘贴时,需要对粘贴数据的来源进行判断,以及当前粘贴对象是通过复制还是剪切操作获取的,如某些粘贴内容来自当前sheet,或者来自同一个工作簿的其他sheet,因此SpreadJSV15.0对复制粘贴功能进行了增强对ClipboardPasted和ClipboardPasting事件增加了三个参数:
1.fromSheet // 粘贴区域的源表
2.fromRange//复制或剪切的数据区域的源区域
3.isCutting //用来表示是否为剪切操作
接下来详细介绍一下,如何使用这三个新增的参数:
1.先监听ClipboardPasted和ClipboardPasting事件,代码如下:
let designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("gc-designer-container"), config);
                        let spread = designer.getWorkbook();
                        let activeSheet = spread.getActiveSheet()
                        spread.addSheet(1,new GC.Spread.Sheets.Worksheet("custom"));
                        activeSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
                              console.log('ClipboardPasting',args);
                        });
                        activeSheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
                              console.log('ClipboardPasted',args);
                        });2.在当前表单执行复制粘贴操作

3.查看控制台:

4.当进行剪切操作时,isCutting结果为true,查看控制台:

利用新增的参数,可判断粘贴是通过复制还是粘贴,在协同编辑时对粘贴数据的源表通过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。




页: [1]
查看完整版本: SpreadJSV15.0新特新解密-工作表-剪贴板相关事件增强