找回密码
 立即注册

QQ登录

只需一步,快速开始

360bid

中级会员

87

主题

268

帖子

825

积分

中级会员

积分
825
360bid
中级会员   /  发表于:2022-8-8 16:29  /   查看:2136  /  回复:11
本帖最后由 Richard.Ma 于 2022-11-10 10:54 编辑

// 设置自动扩展区域         
spread.options.allowExtendPasteRange = true;      
      
// 锁定表格   
sheet.options.isProtected = true


保护之后再去粘贴值无法拓展区域


11 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-7 18:46:22
推荐
您好,您需要单独注册一个新的命令给ctrl +v ,在新的命令中撤销表单保护,并return false。然后再在ClipboardPasted事件中重新设置表单保护。详情参考附件demo

allowExtendPasteRangeCopy.html

2.9 KB, 下载次数: 66

回复 使用道具 举报
360bid
中级会员   /  发表于:2022-8-8 16:38:49
沙发
我们有个思路 能不能监听 Ctrl + V 在粘贴之前取消保护?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-8 18:03:42
板凳
您好,
思路是可以的,在设置表单保护后 Ctrl + V 无法触发ClipboardPasting、ClipboardPasted事件。您可以尝试监听浏览器的粘贴事件,在粘贴前取消表单保护,粘贴后重新设置表单保护。
回复 使用道具 举报
360bid
中级会员   /  发表于:2022-11-7 14:18:59
地板
本帖最后由 360bid 于 2022-11-7 14:23 编辑
Lynn.Dou 发表于 2022-8-8 18:03
您好,
思路是可以的,在设置表单保护后 Ctrl + V 无法触发ClipboardPasting、ClipboardPasted事件。您可 ...

你好  我按着这个思路实现了一下 监听了 Ctrl + v  ,表格以外可以正常监听,
但是spreadjs 表格区域内是会有问题的 无法正常监听到这个事件

很奇怪 Ctrl + c  是可以的 cmd + v  也是可以的  唯独 Ctrl + v 不行




代码如下 :


// ctrl+v
             document.addEventListener("keydown", function (event) {
              let keyStr = event.key;
              console.log(111,(event.ctrlKey === true || event.metaKey === true),keyStr);
              if (
                (keyStr === "v" || keyStr === "V") &&
                (event.ctrlKey === true || event.metaKey === true)
              ) {
              console.log("ctrl+v",1111);
                // templateActiveSheet.options.isProtected = false;
                // console.log("ctrl+v",222);
              }
               
            });



回复 使用道具 举报
360bid
中级会员   /  发表于:2022-11-8 10:34:27
6#
这个有点麻烦了  我就想知道 spreadjs 表格为什么不能监听到 ctrl +v  ,我要怎么做才能监听到?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-8 16:44:36
7#
360bid 发表于 2022-11-8 10:34
这个有点麻烦了  我就想知道 spreadjs 表格为什么不能监听到 ctrl +v  ,我要怎么做才能监听到?

这边测试监听keyup是可以的,您测试下:
  1. document.addEventListener("keyup", function (event) {
  2.               let keyStr = event.key;
  3.               console.log(111,(event.ctrlKey === true || event.metaKey === true),keyStr);
  4.               if (
  5.                 (keyStr === "v" || keyStr === "V") &&
  6.                 (event.ctrlKey === true || event.metaKey === true)
  7.               ) {
  8.               console.log("ctrl+v",1111);
  9.                 // templateActiveSheet.options.isProtected = false;
  10.                 // console.log("ctrl+v",222);
  11.               }
  12.                
  13.             });
复制代码


回复 使用道具 举报
360bid
中级会员   /  发表于:2022-11-8 17:59:10
8#
测试了一下 keyup 的话整个页面都无法监听到 cmd + C  和 cmd +v ,也不满足需求

回复 使用道具 举报
360bid
中级会员   /  发表于:2022-11-8 18:00:50
9#


这个问题目前是解决了

spreadjs 内部应该是对 keydown 这类事件 做了逻辑处理


我想了解这块相关的逻辑特性,这样以后开发就会利用或规避这些事件

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-8 18:08:33
10#
本帖最后由 Lynn.Dou 于 2022-11-28 10:53 编辑
360bid 发表于 2022-11-8 18:00
这个问题目前是解决了

spreadjs 内部应该是对 keydown 这类事件 做了逻辑处理

您是如何解决的呢,可以分享下解决方案吗?
关于问题2已记录下来,这边调研下内部逻辑,有结果贴中回复您。

-------------------------------------------------------

更新进展:
在SpreadJS内部,当监听到键盘事件时会优先接SpreadJS自己的键盘事件,可以调用spread.focus(false)使表单失去焦点,使与之相关的键盘事件断开。
示例代码如下:

  1. document.addEventListener("keydown", function (event) {
  2.   spread.focus(false)
  3.   let keyStr = event.key;
  4.   console.log(111,(event.ctrlKey === true || event.metaKey === true),keyStr);
  5.   if (
  6.     (keyStr === "v" || keyStr === "V") &&
  7.     (event.ctrlKey === true || event.metaKey === true)
  8.   ) {
  9.   console.log("ctrl+v",1111);
  10.     // templateActiveSheet.options.isProtected = false;
  11.     // console.log("ctrl+v",222);
  12.   }
  13.    
  14. });
复制代码


回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部