请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Funo-TSC

金牌服务用户

8

主题

33

帖子

85

积分

金牌服务用户

积分
85
Funo-TSC
金牌服务用户   /  发表于:2025-1-21 09:42  /   查看:118  /  回复:5
20金币
本帖最后由 Funo-TSC 于 2025-1-21 11:27 编辑

需求: 按照这篇教学的步骤,实现带格式插入多行
问题: 封装如下函数,右键菜单点击批量插入没有反应,代码如下

插入后直接这样了,卡在哪步了


image.png266533507.png



  1.       config.commandMap.batchInsertRowContextMenu = {
  2.         text: '批量插入',
  3.         commandName: 'batchInsertRowContextMenu',
  4.         visibleContext: 'ClickRowHeader',
  5.         subCommands: [
  6.           'batchInsertRows10',
  7.           'batchInsertRows50',
  8.           'batchInsertRows100'
  9.         ]
  10.       }
  11.       config.commandMap.batchInsertRows10 = {
  12.         text: '插入 10 行',
  13.         commandName: 'batchInsertRows10',
  14.         execute: async(context, propertyName, fontItalicChecked) => {
  15.           var commandManager = context.Spread.commandManager()
  16.           commandManager.execute({ cmd: 'insertRowAndCopyContent', sheetName: context.Spread.getActiveSheet().name(), rowCount: 10 })
  17.         }
  18.       }

  19.       config.commandMap.batchInsertRows50 = {
  20.         text: '插入 50 行',
  21.         commandName: 'batchInsertRows50',
  22.         execute: async(context, propertyName, fontItalicChecked) => {
  23.           var commandManager = context.Spread.commandManager()
  24.           commandManager.execute({ cmd: 'insertRowAndCopyContent', sheetName: context.Spread.getActiveSheet().name(), rowCount: 50 })
  25.         }
  26.       }

  27.       config.commandMap.batchInsertRows100 = {
  28.         text: '插入 100 行',
  29.         commandName: 'batchInsertRows100',
  30.         execute: async(context, propertyName, fontItalicChecked) => {
  31.           var commandManager = context.Spread.commandManager()
  32.           commandManager.execute({ cmd: 'insertRowAndCopyContent', sheetName: context.Spread.getActiveSheet().name(), rowCount: 100 })
  33.         }
  34.       }
  35.       config.contextMenu.push('batchInsertRowContextMenu')

  36.       const insertRowAndCopyContent = {
  37.         canUndo: true,
  38.         execute: function(context, options, isUndo) {
  39.           const Commands = GC.Spread.Sheets.Commands
  40.           options.cmd = 'insertRowAndCopyContent'
  41.           if (isUndo) {
  42.             Commands.undoTransaction(context, options)
  43.             return true
  44.           } else {
  45.             Commands.startTransaction(context, options)
  46.             context.suspendPaint()
  47.             context.suspendEvent()
  48.             console.log(context, 'context');
  49.             console.log(options, 'options');
  50.             var sheet = context.getSheetFromName(options.sheetName)
  51.             var selections = sheet.getSelections()

  52.             for (var i = 0; i < selections.length; i++) {
  53.               var row = selections[i].row
  54.               sheet.addRows(row, options.rowCount)
  55.               var fromRange = [new GC.Spread.Sheets.Range(row + options.rowCount, 0, 1, sheet.getColumnCount())]
  56.               var toRanges = [new GC.Spread.Sheets.Range(row, 0, options.rowCount, sheet.getColumnCount())]
  57.               this.workbook.commandManager().execute({ cmd: 'clipboardPaste', sheetName: options.sheetName, fromSheet: sheet, fromRanges: fromRange, pastedRanges: toRanges, isCutting: false, clipboardText: '', pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.formulasAndFormatting })
  58.             }

  59.             context.resumeEvent()
  60.             context.resumePaint()
  61.             Commands.endTransaction(context, options)
  62.             return true
  63.           }
  64.         }
  65.       }
  66.       const commandManager = this.workbook.commandManager()
  67.       commandManager.register('insertRowAndCopyContent', insertRowAndCopyContent)
  68.       console.log(config, 'config')
  69.       this.designer.setConfig(config)
复制代码

复制代码













最佳答案

查看完整内容

您好!您参考的博客介绍了自定义右键菜单批量插入多行并复制数据的实现,此法完全适用于您的需求,仅需要将自定义命令中的复制数据代码删除,以复制样式的代码替代。具体地,包括如下步骤: 1. 对DefaultConfig的commandMap属性,定义右键菜单选项,包括text(在右键菜单中的选项名称)、commandName(对应的执行命令名称)、execute(对应的命令执行实体)。 2. 在DefaultConfig对象的contentMenu属性中添加自定义右键菜单选 ...

5 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2025-1-21 09:42:01
来自 2#
您好!您参考的博客介绍了自定义右键菜单批量插入多行并复制数据的实现,此法完全适用于您的需求,仅需要将自定义命令中的复制数据代码删除,以复制样式的代码替代。具体地,包括如下步骤:

1. 对DefaultConfig的commandMap属性,定义右键菜单选项,包括text(在右键菜单中的选项名称)、commandName(对应的执行命令名称)、execute(对应的命令执行实体)。
2. 在DefaultConfig对象的contentMenu属性中添加自定义右键菜单选项名称,令其在右键菜单中可见。
3. 注册自定义菜单选项对应的命令。
4. 将增加了自定义右键菜单选项的DefaultConfig对象设置给Designer。

执行效果如下动图所示,附上demo以供参考:
批量插入多行并复制样式.gif

带格式插入多行.html

7.5 KB, 下载次数: 0

回复 使用道具 举报
Funo-TSC
金牌服务用户   /  发表于:2025-1-21 11:44:11
3#
Wilson.Zhang 发表于 2025-1-21 11:27
您好!您参考的博客介绍了自定义右键菜单批量插入多行并复制数据的实现,此法完全适用于您的需求,仅需要将 ...

已经成功实现了,代码中如何判断已经成功插入了,需要在插入后做其他操作
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-1-21 12:03:48
4#
Funo-TSC 发表于 2025-1-21 11:44
已经成功实现了,代码中如何判断已经成功插入了,需要在插入后做其他操作

监听RowChanegd可以了解插入行或者删除行的详情,您需要在上述自定义菜单选项被触发时判断插入成功吗?还是在菜单选项触发结束后?
回复 使用道具 举报
Funo-TSC
金牌服务用户   /  发表于:2025-1-21 14:42:18
5#
Wilson.Zhang 发表于 2025-1-21 12:03
监听RowChanegd可以了解插入行或者删除行的详情,您需要在上述自定义菜单选项被触发时判断插入成功吗?还 ...

好的,解决了,感谢!
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-1-21 16:16:14
6#
Funo-TSC 发表于 2025-1-21 14:42
好的,解决了,感谢!


解决了就好,那就结帖了。如有新问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部