Clark.Pan 发表于 2023-2-1 19:05:57

SpreadJS在表单保护状态下粘贴内容跨越锁定单元格


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

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


页: [1]
查看完整版本: SpreadJS在表单保护状态下粘贴内容跨越锁定单元格