找回密码
 立即注册

QQ登录

只需一步,快速开始

nssol_sh

注册会员

3

主题

26

帖子

75

积分

注册会员

积分
75
最新发帖
nssol_sh
注册会员   /  发表于:2018-12-20 18:05  /   查看:6860  /  回复:17
本帖最后由 nssol_sh 于 2018-12-20 18:21 编辑

  求大神解答

右键菜单只留了拷贝和值粘贴这两个功能。
  在左边的行头部点拷贝,可以触发ClipboardChanging事件,并且可以获取一整行的数据,
  但是想贴到另外的一行里,
  不管是头部位置,还是第一个单元格的位置,还是选中另外的一整行上点击右键的粘贴菜单,都无法进行粘贴。

   如果只是拷贝部分单元格,则可以正常的拷贝和粘贴。

      // コンテキストメニュー
        var menuData = spread.contextMenu.menuData;
        menuData.length = 6;
        menuData.splice(1, 4);
        menuData[0].text = '拷贝';
        menuData[1].text = '粘贴';
        menuData[1].workArea = 'viewportcolHeaderrowHeaderslicercorner';

        // 在左边的行头部点拷贝,可以触发这个事件,并且可以获取一整行的数据,
        spread.bind(GC.Spread.Sheets.Events.ClipboardChanging, function (sender, args) {
            console.log("ClipboardChanging");
        });

        // 这个事件在部分单元格拷贝粘贴里可以正常触发,
        // 如果是在头部点击的拷贝,这个粘贴事件就不触发了。
        spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
            var cellRange = args.cellRange;
        });

17 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-21 09:12:58
沙发
您好,问您几个问题。

1、您的SpreadJS 版本号多少?

2、您的表格是否写了保护?也就是sheet.options.isProtected 属性是否为true?

我在新版的v12上没能重现您描述的问题,您可以提供一个能重现问题的Demo,

我这边给您排查一下看问题出在哪里。

评分

参与人数 1满意度 +5 收起 理由
nssol_sh + 5 很给力!

查看全部评分

回复 使用道具 举报
nssol_sh
注册会员   /  发表于:2018-12-25 10:41:45
板凳
KevinChen 发表于 2018-12-21 09:12
您好,问您几个问题。

1、您的SpreadJS 版本号多少?

你好,上边那个问题已经解决了。
确实是保护状态的问题,之前以为只要被拷贝的单元格里不含保护的项目就可以。但是在行选择的时候
因为第一行的列项目名设成了保护状态。即使选择的第二行里没有被保护的单元格,也不行。
所以把第一行的保护状态也取消,整个sheet的保护状态都取消,用editStarting进行制御。
上边的问题就解决了。

但是现在有新的问题-------
背景是拷贝粘贴全是用的自带的功能,没加自己的实装。

1。
①从外部的excel选择单元格,点Ctrl-C(这时选定的单元格进了系统剪贴板)
②在SpreadJs区域点右键里的拷贝(这时选定的单元格进了Spreadjs剪贴板?),
③再在SpreadJs区域点Ctrl-V、这时候粘进单元格的内容是外部①拷贝的内容。
这种情况有没有办法让他粘进去②的内容?

2。在SPreadJs里点Ctrl-C,Ctrl-V怎样让它不带书式,只粘贴值?
我设定了这个spread.options.clipBoardOptions = spreadNS.ClipboardPasteOptions.Values;
也不好用。还是会带着书式拷贝进去。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-25 12:11:25
地板
您好,针对您的问题,解答如下:

1、您好,有办法,您可以使用ClipboardPasting事件来处理这个情况。

思路是这样:Ctrl + V 默认调用的是系统剪贴板,因此SpreadJS此时拿到的就是系统剪贴板的内容。

我们可以把这次粘贴操作在ClipboardPasting中cancel掉,然后调用paste命令来实现内部粘贴操作。

代码如下:

  1. var flg = true;
  2.         spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (s, e) {

  3.             if(flg){
  4.                 e.cancel = true;
  5.                 flg = false;
  6.                 var sheet = spread.getActiveSheet();
  7.                 spread.commandManager().execute({
  8.                     cmd : "paste",
  9.                     sheetName : sheet.name()
  10.                 });
  11.             }

  12.         });
复制代码


2、您这个设置有问题,实际上clipBoardOptions 是worksheet的设置选项,应该设置成:

  1. sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values
复制代码

评分

参与人数 1满意度 +5 收起 理由
nssol_sh + 5 很给力!

查看全部评分

回复 使用道具 举报
nssol_sh
注册会员   /  发表于:2018-12-25 14:29:01
5#
KevinChen 发表于 2018-12-25 12:11
您好,针对您的问题,解答如下:

1、您好,有办法,您可以使用ClipboardPasting事件来处理这个情况。

KevinChen 你好。

首先关于第二个问题,确实是我写错了。。。

第一个问题。按照你给的方案,好用。非常非常感谢。

不过就第一个问题的答案,再补充个小问题,
如果我要在这里运行其他的命令,是不是把cmd后面的paste替换掉就可以。
那么其他的命令,,是从哪可以得到的?有命令的列表吗
比如我要调用剪贴命令,是用cut?其他的呢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-25 15:15:34
6#
您好,SpreadJS原生支持的命令列表,您可以参考API:

http://help.grapecity.com/spread/SpreadSheets12/webframe.html#SpreadJS~GC.Spread.Sheets.Commands.html

除了原生支持的命令,您也可以自己定义命令,您可以参考附件中的Demo。

另外补充一下,上边贴的代码不严谨,判断逻辑应该加一个else设置一下flg变量:

  1. var flg = true;
  2.         spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (s, e) {

  3.             if(flg){
  4.                 e.cancel = true;
  5.                 flg = false;
  6.                 var sheet = spread.getActiveSheet();
  7.                 spread.commandManager().execute({
  8.                     cmd : "paste",
  9.                     sheetName : sheet.name()
  10.                 });
  11.             }else{
  12.                 flg = true;
  13.             }

  14.         });
复制代码

CustomCommandAndRollback.html

5.47 KB, 下载次数: 192

评分

参与人数 1满意度 +5 收起 理由
nssol_sh + 5 很给力!

查看全部评分

回复 使用道具 举报
nssol_sh
注册会员   /  发表于:2018-12-25 16:14:07
7#
KevinChen 发表于 2018-12-25 15:15
您好,SpreadJS原生支持的命令列表,您可以参考API:

http://help.grapecity.com/spread/SpreadSheets12 ...

好的。回复看到了。。

那个flg我放在ClipboardPasted事件里重置回true的。也好用。

上边的问题到此为止,可以结帖了。
多谢。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-25 17:09:41
8#
感谢您的反馈,很高兴能解决您的问题,本帖我结帖了,有新的问题欢迎发新帖交流~

评分

参与人数 1满意度 +5 收起 理由
nssol_sh + 5 很给力!

查看全部评分

回复 使用道具 举报
nssol_sh
注册会员   /  发表于:2019-2-1 16:35:27
9#
KevinChen 发表于 2018-12-25 17:09
感谢您的反馈,很高兴能解决您的问题,本帖我结帖了,有新的问题欢迎发新帖交流~

有一个小问题,不值当再开个帖子,就着这个已经结束的 帖子问一下吧。

传闻买了spreadjs的序列号之后,应该就是金牌会员,我这个为啥不是呀。。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-1 16:56:51
10#
您好,升级金牌会员需要您发送申请邮件到 support.xa@grapecity.com

说明您的公司信息,论坛ID,

注意:请您使用合同上的联系人邮箱发送申请邮件。

评分

参与人数 1满意度 +5 收起 理由
nssol_sh + 5 很给力!

查看全部评分

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