找回密码
 立即注册

QQ登录

只需一步,快速开始

小弟弟

初级会员

34

主题

152

帖子

466

积分

初级会员

积分
466
小弟弟
初级会员   /  发表于:2023-1-3 10:46  /   查看:2781  /  回复: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








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

14 个回复

正序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-9 10:15:26
15#
参考下方代码,用tableInsertRowsBelowForContextMenu命令实现table向下插入行

  1. document.getElementById("insertTableRow").addEventListener("click", function () {
  2.                 // 获取当前选中的行索引
  3.                 var row = sheet.getActiveRowIndex();
  4.                 console.log(row);
  5.                 var commandManager = spread.commandManager();
  6.                 // commandManager.execute({ cmd: "tableInsertRows", sheetName: sheet.name(), tableName: "table1", row: row + 1, count: 1 })
  7.                 commandManager.execute({ cmd: "tableInsertRowsBelowForContextMenu", sheetName: sheet.name(), tableName: "table1", isAfter: true, row: row, count: 1 })
  8.             })
复制代码


回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-7 09:33:36
14#
Lynn.Dou 发表于 2023-1-6 16:59
用“tableInsertRows”命令去插入table行,示例代码如下:

https://demo.grapecity.com.cn/spreadjs/h ...

现在这个命令他默认是往上插入,我想让他往下插入怎么改 就是加这个true
在哪里加       table.insertRows(3, 1, true /*isInsertAfter*/);
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-6 16:59:13
13#
小弟弟 发表于 2023-1-6 14:33
如果不行的话我就在新增一个按钮,追加表格行,用table.insertRows(),结果发现这个也不执行GC.Spread.She ...

用“tableInsertRows”命令去插入table行,示例代码如下:
  1. document.getElementById("insertTableRow").addEventListener("click", function() {
  2.                 // 获取当前选中的行索引
  3.                 var row = sheet.getActiveRowIndex();
  4.                 var commandManager = spread.commandManager();
  5.                 commandManager.execute({cmd:"tableInsertRows",sheetName:sheet.name(),tableName:"table1", row: row+1, count: 1})
  6.                         
  7.             })
复制代码

https://demo.grapecity.com.cn/sp ... nds#tableinsertrows
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-6 14:33:36
12#
Lynn.Dou 发表于 2023-1-5 18:16
需要调研下原因,待有结果贴中回复您

如果不行的话我就在新增一个按钮,追加表格行,用table.insertRows(),结果发现这个也不执行GC.Spread.Sheets.Events.TableRowsChanged,
这个怎么转成用命令执行啊
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-5 18:16:18
11#
小弟弟 发表于 2023-1-5 14:14
这个可以。大佬,我刚试了一下,没啥问题,但发现了一个小问题,在表格最后一行处点击插入的话,还是不执 ...

需要调研下原因,待有结果贴中回复您
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-5 14:14:38
10#
Lynn.Dou 发表于 2023-1-5 14:00
用命令去插入行,而不是使用addRows API,代码修改如下:

完整代码请参考附件demo

这个可以。大佬,我刚试了一下,没啥问题,但发现了一个小问题,在表格最后一行处点击插入的话,还是不执行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-4 18:47:19
7#
Lynn.Dou 发表于 2023-1-4 18:44
table的插入行,是table区域的向下扩展,并不会影响原sheet的行数。
您的需求是什么呢?目前沟通来看这边 ...

我的需求是要右键插入,能够向下插入行,之后页面可能会有表格,也会有单元格,之后我在表格数据内插入一行后,我的GC.Spread.Sheets.Events.TableRowsChanged不执行,所以方法走不了。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-4 18:44:14
6#
table的插入行,是table区域的向下扩展,并不会影响原sheet的行数。
您的需求是什么呢?目前沟通来看这边没太理解,您留下联系方式,这边与您电话沟通下。
回复 使用道具 举报
小弟弟
初级会员   /  发表于:2023-1-4 17:43:32
5#
小弟弟 发表于 2023-1-4 13:40
好的,这个我加上之后在表格内容处新增一行,他并没有新增到表格里,而是光新增了一行,修改表格新增一行 ...

之后为什么tablerowsChanged监听不到啊,怎么才能让他监听到这个新增的行
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部