找回密码
 立即注册

QQ登录

只需一步,快速开始

cathy

注册会员

10

主题

26

帖子

82

积分

注册会员

积分
82
cathy
注册会员   /  发表于:2022-10-10 19:19  /   查看:2496  /  回复:8
1金币
本帖最后由 cathy 于 2022-10-10 19:22 编辑

由于右键菜单访问不到外部复制到的内容,然后我们客户又习惯去点右键菜单,不知道按ctrl+v,现在就想做个提示,让客户知道可以通过ctrl+v粘贴。
现在问题是这个提示弹出的时机,应该是在用户点右键菜单复制外部内容失败的时候?
那么我应该怎么知道用户复制外部内容失败了呢?

我想了一个方案是,用户点右键菜单,复制到空内容的时候,就提示用户试一下ctrl+v,可能不准确,但是至少包含了复制外部内容失败这个情况?(或者有更好的判断方式也请教我一下)
可我发现,我也不知道什么时候复制到空内容,因为我试了下,啥都没复制的时候,ClipboardPasting和ClipboardPasted事件都不会触发,我想通过事件捕捉复制内容的想法失败了。
现在我想的是,能不能改写、点右键菜单执行粘贴的函数,然后去读spreadjs clipboard里的内容看是不是为空,决定要不要弹个alert?就想问一下这个怎么实现?
或者粘贴的函数中我加个timeout,看紧接着有没有发生ClipboardPasting事件?
不知道哪种实现方式比较好,求教,感谢~

最佳答案

查看完整内容

执行paste命令进行粘贴,API如下: 示例代码: spread.commandManager().execute({cmd: "paste", sheetName: "Sheet1"});

8 个回复

正序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-12 14:52:23
10#
您客气了,那本帖就先结贴了,有问题欢迎另开新帖交流。
回复 使用道具 举报
cathy
注册会员   /  发表于:2022-10-12 14:34:08
9#
Lynn.Dou 发表于 2022-10-12 14:06
执行paste命令进行粘贴,API如下:

示例代码:

OK,学会了,谢谢!
回复 使用道具 举报
cathy
注册会员   /  发表于:2022-10-11 19:18:41
7#
本帖最后由 cathy 于 2022-10-11 19:21 编辑
Lynn.Dou 发表于 2022-10-11 17:17
您好,
这边想到的思路跟您描述的类似,但实际测试过程中发现,在重写右键菜单粘贴项后,如果剪贴板没有数 ...

好的。那能教我一下怎么改写右键菜单吗?

我自己试着这样写了一下,但是不知道要怎么执行内置的paste all,paste formulas,paste values……之类的command?或者有什么其他实现方式教我一下也可以?
  1. const commandManager = spread.commandManager();
  2. commandManager.register('toolbar.customPasteAll', {
  3.   canUndo: true,
  4.   execute: () => {
  5.     if (选择粘贴来自外部的内容) {
  6.       // 提示使用ctrl + v
  7.     } else {
  8.       // 这里运行原来的paste命令要怎么写?
  9.     }        
  10.   },
  11. });

  12. spread.contextMenu.push({
  13.   command: 'toolbar.customPasteAll',
  14.   text: 'Paste All',
  15.   name: 'customPasteAll',
  16.   workArea: 'viewport',
  17. });
复制代码


回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-11 17:17:38
6#
本帖最后由 Lynn.Dou 于 2022-10-11 17:21 编辑

您好,
这边想到的思路跟您描述的类似,但实际测试过程中发现,在重写右键菜单粘贴项后,如果剪贴板没有数据,触发不了粘贴事件的。
所以测试来看,这种思路行不通。
有个想法,可以直接重写右键菜单粘贴项,弹出弹窗让用户确认是否外部粘贴,如果是则提示走ctrl+v快捷键。
如果不是,则继续执行粘贴命令。
除此,这边也没有更好的建议了。
回复 使用道具 举报
xcymoo
超级版主   /  发表于:2022-10-10 20:49:59
5#
cathy 发表于 2022-10-10 20:40
https://gcdn.grapecity.com.cn/showtopic-43725-1-1.html
参考这个帖子,外部内容应该是没有权限复制的 ...

的确 之前我理解有误了,这个确实实现不了
回复 使用道具 举报
cathy
注册会员   /  发表于:2022-10-10 20:40:41
4#
本帖最后由 cathy 于 2022-10-10 20:49 编辑
xcymoo 发表于 2022-10-10 19:48
您好 关于您提到的:右键菜单访问不到外部复制到的内容,我尝试后发现可以通过以下代码获取到剪切板的内容 ...


唔。。我们说的是同一个右键复制吗?我说的是spreadjs sheet上的右键菜单,从Excel之类的地方复制东西过来。

参考这个帖子,应该是没有权限复制的?
https://gcdn.grapecity.com.cn/showtopic-43725-1-1.html
回复 使用道具 举报
xcymoo
超级版主   /  发表于:2022-10-10 19:48:32
2#
您好 关于您提到的:右键菜单访问不到外部复制到的内容,我尝试后发现可以通过以下代码获取到剪切板的内容,不知道是否可以解决您的问题。
请注意,这段代码在执行时需要聚焦到页面上,所以您通过f12执行以下代码后,请尽快切换到页面,否则会失败

setTimeout(async function() {
    let text = await navigator.clipboard.read()
    console.log(text)
}, 1000)


回复 使用道具 举报
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-10 19:19:14
来自 8#
执行paste命令进行粘贴,API如下:
image.png180488585.png
示例代码:
spread.commandManager().execute({cmd: "paste", sheetName: "Sheet1"});
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部