找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15531

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-1 19:05  /   查看:922  /  回复:0

本文部分实现承接自博客《SpreadJS在已有快捷键功能基础上追加操作
承接上文,当我们完成在Ctrl+V之前解除表单保护之后,后面的内容就比较容易理解了。
SpreadJS在粘贴过程中有两个事件ClipboardPastingClipboardPasted。
ClipboardPasting用于表示正在进行粘贴而未粘的状态。
ClipboardPasted用于表示粘贴完成后这个状态。

利用这两个事件,我们可以完成后续操作:
1.在ClipboardPasting事件中,这个时候粘贴将要进行还未进行,我们需要在此时先获取粘贴区域中的所有锁定单元格的内容并进行缓存。
  1. var tempdata;
  2.                 sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
  3.   tempdata = [];
  4.   var col = args.cellRange.col;
  5.   var row = args.cellRange.row;
  6.   for(var i =row ;i<row+args.cellRange.rowCount;i++){
  7.     for (var j = col;j<col+args.cellRange.colCount;j++){
  8.       if( sheet.getCell(i,j).locked()){
  9.         tempdata.push({i:i,j:j,val:sheet.getCell(i,j).value()});
  10.       }
  11.     }
  12.   }
  13.                 });
复制代码
2.在ClipboardPasted事件中,这个时候粘贴已经进行完毕,之前锁定单元格中的内容已经被粘贴内容覆盖。
这个时候我们需要将之前缓存的内容再次复写。以保证锁定单元格的内容还是粘贴之前的内容。
之后我们还可以在事件中将表单保护重新设置上。
  1. sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
  2.   for(var i=0; i< tempdata.length;i++){
  3.     sheet.setValue(tempdata[i].i,tempdata[i].j,tempdata[i].val)
  4.   }
  5.   sheet.options.isProtected = true;
  6.                 });
复制代码
这样,我们就完成了上述需求。
完整的demo可以参考附件


外部复制粘贴内容支持跨越锁定单元格.html

3.52 KB, 下载次数: 13

0 个回复

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