找回密码
 立即注册

QQ登录

只需一步,快速开始

小弟弟

初级会员

34

主题

152

帖子

466

积分

初级会员

积分
466
小弟弟
初级会员   /  发表于:2023-1-3 10:46  /   查看:2778  /  回复:14
12金币
本帖最后由 小弟弟 于 2023-1-3 17:20 编辑



const insertRowsCopyStyle = {
        canUndo: true,
        name: 'insertRowsCopyStyle',
        execute: (context, options, isUndo) => {
          const Commands = GC.Spread.Sheets.Commands
          if (isUndo) {
            Commands.undoTransaction(context, options)
            return true
          } else {
            Commands.startTransaction(context, options)
            const sheet = context.getSheetFromName(options.sheetName)
            sheet.suspendPaint()
            // 先执行原生insertRows命令
            options.cmd = 'gc.spread.contextMenu.insertRows'
            context.commandManager().execute(options)
            options.cmd = 'insertRowsCopyStyle'


            let beforeRowCount = 0
            if (options.selections && options.selections.length) {
              const selections = this.getSortedRowSelections(options.selections)
              for (let i = 0; i < selections.length; i++) {
                const selection = selections
                if (selection.row > 0) {
                  for (let row = selection.row + beforeRowCount; row < selection.row + beforeRowCount + selection.rowCount; row++) {
                    sheet.copyTo(selection.row + beforeRowCount - 1, -1, row, -1, 1, -1, GC.Spread.Sheets.CopyToOptions.style | GC.Spread.Sheets.CopyToOptions.span)
                  }
                }
                beforeRowCount += selection.rowCount
              }
            }
            sheet.resumePaint()


            Commands.endTransaction(context, options)
            return true
          }
        }
      }
      // 注册命令
      spread.commandManager().register('insertRowsCopyStyle', insertRowsCopyStyle)


      // 替换原有插入命令
      function MyContextMenu() {}
      MyContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread)
      MyContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, item) {
        itemsDataForShown.forEach(function (item, index) {
          if (item && item.name === 'gc.spread.insertRows') {
            item.command = 'insertRowsCopyStyle'
          }
        })
      }
      const contextMenu = new MyContextMenu()
      spread.contextMenu = contextMenu








这个要怎么改才能又能往下插入还能复制上面的样式呢

最佳答案

查看完整内容

用命令去插入行,而不是使用addRows API,代码修改如下: 完整代码请参考附件demo

14 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-3 10:46:31
来自 9#
用命令去插入行,而不是使用addRows API,代码修改如下:
  1. // 用命令去插入行
  2.                             var commandManager = context.commandManager();
  3.                             commandManager.execute({cmd:"gc.spread.contextMenu.insertRows",sheetName:sheet.name(),selections:[new GC.Spread.Sheets.Range(row + 1,-1,rowCount,-1)]})
  4.                         
复制代码
image.png973805847.png
完整代码请参考附件demo

sjs向下插入行且复制样式 (1).html

6.26 KB, 下载次数: 154

评分

参与人数 1满意度 +5 收起 理由
小弟弟 + 5

查看全部评分

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-3 18:42:56
2#
您好,
请参考附件demo,主要代码如下:
  1. //定义向下插入行且复制样式insertRowsBelow命令
  2.             var insertRowsBelow = {
  3.                 canUndo: true,
  4.                 name: "insertRowsBelow",
  5.                 execute: function (context, options, isUndo) {
  6.                     var Commands = GC.Spread.Sheets.Commands;
  7.                     if (isUndo) {
  8.                         Commands.undoTransaction(context, options);
  9.                         return true;
  10.                     } else {
  11.                         Commands.startTransaction(context, options);
  12.                         var sheet = context.getSheetFromName(options.sheetName);
  13.                         sheet.suspendPaint();
  14.                         console.log(options.selections)
  15.                         var selection = options.selections[0];
  16.                         //向下插入行
  17.                         var row = selection.row;
  18.                         var rowCount = selection.rowCount;
  19.                         if (options.selections && options.selections.length) {
  20.                             sheet.addRows(row + 1, rowCount);
  21.                         }
  22.                         // 复制上一行样式:该示例仅针对单行插入,起参考作用。
  23.                         // 对于多行复制样式,请根据实际业务需求进行设计。
  24.                         sheet.copyTo(row, -1, row + 1, -1, 1, -1, GC.Spread.Sheets.CopyToOptions.style | GC.Spread.Sheets.CopyToOptions.span);
  25.                         sheet.resumePaint();

  26.                         Commands.endTransaction(context, options);
  27.                         return true;
  28.                     }
  29.                 }
  30.             };

  31.             // 注册命令
  32.             spread.commandManager().register("insertRowsBelow", insertRowsBelow);

  33.             // 替换原有插入命令
  34.             function MyContextMenu() { }
  35.             MyContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
  36.             MyContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
  37.                 itemsDataForShown.forEach(function (item, index) {
  38.                     if (item && item.name === "gc.spread.insertRows") {
  39.                         item.command = "insertRowsBelow"
  40.                     }
  41.                 });

  42.             };
  43.             var contextMenu = new MyContextMenu();
  44.             spread.contextMenu = contextMenu;
复制代码


sjs向下插入行且复制样式.html

5.7 KB, 下载次数: 143

回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-4 13:40:15
3#
Lynn.Dou 发表于 2023-1-3 18:42
您好,
请参考附件demo,主要代码如下:

好的,这个我加上之后在表格内容处新增一行,他并没有新增到表格里,而是光新增了一行,修改表格新增一行的内容后,点击保存,table数据里不会有当前新增行的内容
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-4 17:41:15
4#
Lynn.Dou 发表于 2023-1-3 18:42
您好,
请参考附件demo,主要代码如下:

怎么说啊大佬,在帮我看看下面的问题啊
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-4 17:43:32
5#
小弟弟 发表于 2023-1-4 13:40
好的,这个我加上之后在表格内容处新增一行,他并没有新增到表格里,而是光新增了一行,修改表格新增一行 ...

之后为什么tablerowsChanged监听不到啊,怎么才能让他监听到这个新增的行
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-4 18:44:14
6#
table的插入行,是table区域的向下扩展,并不会影响原sheet的行数。
您的需求是什么呢?目前沟通来看这边没太理解,您留下联系方式,这边与您电话沟通下。
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-4 18:47:19
7#
Lynn.Dou 发表于 2023-1-4 18:44
table的插入行,是table区域的向下扩展,并不会影响原sheet的行数。
您的需求是什么呢?目前沟通来看这边 ...

我的需求是要右键插入,能够向下插入行,之后页面可能会有表格,也会有单元格,之后我在表格数据内插入一行后,我的GC.Spread.Sheets.Events.TableRowsChanged不执行,所以方法走不了。
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-4 18:53:35
8#
本帖最后由 小弟弟 于 2023-1-4 19:27 编辑
Lynn.Dou 发表于 2023-1-4 18:44
table的插入行,是table区域的向下扩展,并不会影响原sheet的行数。
您的需求是什么呢?目前沟通来看这边 ...
同时还得复制上一行样式
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-5 14:14:38
10#
Lynn.Dou 发表于 2023-1-5 14:00
用命令去插入行,而不是使用addRows API,代码修改如下:

完整代码请参考附件demo

这个可以。大佬,我刚试了一下,没啥问题,但发现了一个小问题,在表格最后一行处点击插入的话,还是不执行TableRowsChanged,这个如果能解决就没问题了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部