找回密码
 立即注册

QQ登录

只需一步,快速开始

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

124

主题

8928

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13548

讲师达人悬赏达人元老葡萄SpreadJS 认证SpreadJS 高级认证微信认证勋章

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-4-30 17:21  /   查看:2874  /  回复:0
本帖最后由 dexteryao 于 2020-5-8 15:11 编辑

通过重写右键菜单命令,实现插入后复制前一行样式的功能


  1.             var insertRowsCopyStyle = {
  2.                 canUndo: true,
  3.                 name: "insertRowsCopyStyle",
  4.                 execute: function (context, options, isUndo) {
  5.                     var Commands = GC.Spread.Sheets.Commands;
  6.                     if (isUndo) {
  7.                         Commands.undoTransaction(context, options);
  8.                         return true;
  9.                     } else {
  10.                         Commands.startTransaction(context, options);
  11.                         var sheet = context.getSheetFromName(options.sheetName);
  12.                         sheet.suspendPaint();
  13.                         options.cmd = "gc.spread.contextMenu.insertRows"
  14.                         context.commandManager().execute(options);
  15.                         options.cmd = "insertRowsCopyStyle";

  16.                         var beforeRowCount = 0;
  17.                         if (options.selections && options.selections.length) {
  18.                             var selections = getSortedRowSelections(options.selections)
  19.                             for (var i = 0; i < selections.length; i++) {
  20.                                 var selection = selections[i];
  21.                                 if (selection.row > 0) {
  22.                                     for (var row = selection.row + beforeRowCount; row < selection.row + beforeRowCount + selection.rowCount; row++) {
  23.                                         sheet.copyTo(selection.row + beforeRowCount - 1, -1, row, -1, 1, -1, GC.Spread.Sheets.CopyToOptions.style | GC.Spread.Sheets.CopyToOptions.span | GC.Spread.Sheets.CopyToOptions.formula);
  24.                                     }
  25.                                 }
  26.                                 beforeRowCount += selection.rowCount;
  27.                             }
  28.                         }
  29.                         sheet.resumePaint();

  30.                         Commands.endTransaction(context, options);
  31.                         return true;
  32.                     }
  33.                 }
  34.             };

  35.             function getSortedRowSelections(selections) {
  36.                 var sortedRanges = selections;
  37.                 for (var i = 0; i < sortedRanges.length - 1; i++) {
  38.                     for (var j = i + 1; j < sortedRanges.length; j++) {
  39.                         if (sortedRanges[i].row > sortedRanges[j].row) {
  40.                             var temp = sortedRanges[i];
  41.                             sortedRanges[i] = sortedRanges[j];
  42.                             sortedRanges[j] = temp;
  43.                         }
  44.                     }
  45.                 }
  46.                 return sortedRanges;
  47.             }

  48.             spread.commandManager().register("insertRowsCopyStyle", insertRowsCopyStyle);

  49.             function MyContextMenu() {}
  50.             MyContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
  51.             MyContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
  52.                 itemsDataForShown.forEach(function (item, index) {
  53.                     if (item && item.name === "gc.spread.insertRows") {
  54.                         item.command = "insertRowsCopyStyle"
  55.                     }
  56.                 });
  57.                 var sheet = spread.getActiveSheet();
  58.                 var selections = sheet.getSelections();
  59.                 if(selections[0].row === 1){
  60.                     //删除某项,也可以通过遍历itemsDataForShown找到对应项位置
  61.                     itemsDataForShown.splice(1, 1)
  62.                 }

  63.             };
  64.             var contextMenu = new MyContextMenu();
  65.             spread.contextMenu = contextMenu;


复制代码


0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部