找回密码
 立即注册

QQ登录

只需一步,快速开始

鸳鸯配2024

金牌服务用户

30

主题

163

帖子

413

积分

金牌服务用户

积分
413
鸳鸯配2024
金牌服务用户   /  发表于:2024-8-5 11:03  /   查看:766  /  回复:4
本帖最后由 鸳鸯配2024 于 2024-8-5 16:12 编辑
  1. config.commandMap = {
  2.             "insertMutiRows": {
  3.                 text: "上方添加行",
  4.                 commandName: "insertMutiRows",
  5.             },
  6.             "insertMutiRowsDown": {
  7.                 text: "下方添加行",
  8.                 commandName: "insertMutiRowsDown",
  9.             },
  10.             

  11.             }
  12.         }


  13. var insertRowsByCounts = {
  14.             canUndo: true,
  15.             canExcute: function () {
  16.                 console.log(arguments)
  17.             },
  18.             execute: function (spread, options, isUndo) {
  19.                 var Commands = GC.Spread.Sheets.Commands;
  20.                 if (isUndo) {
  21.                     Commands.undoTransaction(spread, options);
  22.                     return true;
  23.                 } else {
  24.                     Commands.startTransaction(spread, options);
  25.                     if (options.commandOptions) {
  26.                         console.log('在上方插入' + options.commandOptions);
  27.                         var sheet = spread.getSheetFromName(options.sheetName);
  28.                         sheet.suspendPaint();
  29.                         sheet.addRows(options.activeRow, parseInt(options.commandOptions));
  30.                         sheet.resumePaint();

  31.                     }
  32.                     Commands.endTransaction(spread, options);
  33.                     return true;
  34.                 }
  35.             }
  36.         };

  37.         let insertRowsByCountsDown = {
  38.             canUndo: true,
  39.             canExcute: function () {
  40.                 console.log(arguments)
  41.             },
  42.             execute: function (spread, options, isUndo) {
  43.                 var Commands = GC.Spread.Sheets.Commands;
  44.                 console.log(options, '--options--')
  45.                 if (isUndo) {
  46.                     Commands.undoTransaction(spread, options);
  47.                     return true;
  48.                 } else {
  49.                     Commands.startTransaction(spread, options);
  50.                     if (options.commandOptions) {
  51.                         console.log('在下方插入++++' + options.commandOptions);
  52.                         var sheet = spread.getSheetFromName(options.sheetName);
  53.                         sheet.suspendPaint();
  54.                         sheet.addRows(options.activeRow, parseInt(options.commandOptions));
  55.                         sheet.resumePaint();
  56.                     }
  57.                     Commands.endTransaction(spread, options);
  58.                     return true;
  59.                 }
  60.             }
  61.         };




  62.         var commandManager = spread.commandManager();
  63.         let insertRowAndCopyContent = {
  64.             canUndo: true,
  65.             execute: function (context, options, isUndo) {
  66.                 let Commands = GC.Spread.Sheets.Commands;
  67.                 options.cmd = "insertRowAndCopyContent";
  68.                 if (isUndo) {
  69.                     Commands.undoTransaction(context, options);
  70.                     return true;
  71.                 } else {
  72.                     Commands.startTransaction(context, options);
  73.                     context.suspendPaint();
  74.                     context.suspendEvent();
  75.                     var sheet = context.getSheetFromName(options.sheetName);
  76.                     var selections = sheet.getSelections();

  77.                     for(var i = 0; i < selections.length; i++){
  78.                         var row = selections[i].row;
  79.                         sheet.addRows(row,options.rowCount);
  80.                         var fromRange = [new GC.Spread.Sheets.Range(row + options.rowCount, 0, 1, sheet.getColumnCount())];
  81.                         var toRanges = [new GC.Spread.Sheets.Range(row, 0, options.rowCount, sheet.getColumnCount())];
  82.                         spread.commandManager().execute({cmd: "clipboardPaste", sheetName: options.sheetName, fromSheet: sheet, fromRanges: fromRange, pastedRanges: toRanges, isCutting: false, clipboardText: "", pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.formulasAndFormatting});
  83.                     }
  84.                     
  85.                     context.resumeEvent();
  86.                     context.resumePaint();
  87.                     Commands.endTransaction(context, options);
  88.                     return true;
  89.                 }
  90.                 }
  91.         };
  92.         var commandManager = spread.commandManager();
  93.         commandManager.register("insertRowAndCopyContent", insertRowAndCopyContent);
  94.         commandManager.register("insertMutiRows", insertRowsByCounts, null, false, false, false, false);
  95.         commandManager.register("insertMutiRowsDown", insertRowsByCountsDown, null, false, false, false, false);
  96.         // 获取旧的菜单
  97.         var oldCreateMenuItemElement = spread.contextMenu.menuView.createMenuItemElement;
  98.         spread.contextMenu.menuView.createMenuItemElement = function (menuItemData) {
  99.             var self = this;
  100.             var menuItemView = oldCreateMenuItemElement.call(self, menuItemData);
  101.             if (menuItemData.name === "insertMutiRows") {
  102.                 var supMenuItemContainer = menuItemView[0];
  103.                 var inputBlock = createInput();
  104.                 // var btnupBlock = createBtn();
  105.                 supMenuItemContainer.appendChild(inputBlock);
  106.                 // supMenuItemContainer.appendChild(btnupBlock);
  107.             }
  108.             // console.log(menuItemData.name, '--menuItemData.name--666')

  109.             if (menuItemData.name === "insertMutiRowsDown") {
  110.                 // console.log(menuItemView, '--menuItemView--')
  111.                 var supMenuItemContainer = menuItemView[0];
  112.                 var inputBlock = createInput();
  113.                 // var btnupBlock = createBtn();
  114.                 supMenuItemContainer.appendChild(inputBlock);
  115.                 // supMenuItemContainer.appendChild(btnupBlock);
  116.             }
  117.             return menuItemView;
  118.         }

  119.         var oldgetCommandOptions = spread.contextMenu.menuView.getCommandOptions;
  120.         spread.contextMenu.menuView.getCommandOptions = function (menuItemData, host, event) {
  121.             console.log(menuItemData.name, '--menuItemData.name--')
  122.             if (menuItemData && menuItemData.name === "insertMutiRows") {
  123.                 var ele = document.getElementsByClassName("inputBlock")[0]
  124.                 return ele.value;
  125.             }else  if (menuItemData && menuItemData.name === "insertMutiRowsDown") {
  126.                 var ele = document.getElementsByClassName("inputBlock")[0]
  127.                 return ele.value;
  128.             } else {
  129.                 return oldgetCommandOptions.apply(this, arguments)
  130.             }
  131.         };
复制代码


上方添加行 是生效的


下方添加行  这个是不生效的,不知道问题在哪,希望能帮忙看下。


img_v3_02df_05293b24-416f-4b1d-a1ee-ca1790e6effg.jpg64714659.png

4 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2024-8-5 18:37:09
沙发
您好!关于您对自定义右键菜单的需求,我已经在SperadJS中实现了,但是在在线表格编辑器中遇到点儿问题,正在排查解决中,请您稍候。
附件为SpreadJS中自定义右键菜单的demo,请您先参考。

右键菜单自定义选项.zip

1.95 KB, 下载次数: 69

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-6 08:46:50
板凳
本帖最后由 Wilson.Zhang 于 2024-8-6 08:53 编辑

您好!走读了您提供的代码,自定义右键菜单选项和命令的流程是正常的。您要自定义的菜单选项分别是“向上插入N行”和“向下插入N行”,分别创建了两个小容器用以接收输入的行数,但是两个菜单选项共用了同一个小容器接收行数,这才导致“向下插入N行”无效。如下图所示:
1722904700146.png648357848.png
如上所述,在SpreadJS和在线表格编辑器分别实现了该需求,附件即相关代码,供您参考!

右键菜单新增自定义选项.zip

4.65 KB, 下载次数: 58

回复 使用道具 举报
鸳鸯配2024
金牌服务用户   /  发表于:2024-8-7 11:56:22
地板
Wilson.Zhang 发表于 2024-8-6 08:46
您好!走读了您提供的代码,自定义右键菜单选项和命令的流程是正常的。您要自定义的菜单选项分别是“向上插 ...

解决问题了,谢谢
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-7 13:33:51
5#

不客气!那就结贴了,如有问题,欢迎继续发帖沟通!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部