找回密码
 立即注册

QQ登录

只需一步,快速开始

迷路的麋鹿
金牌服务用户   /  发表于:2022-8-8 13:29  /   查看:2339  /  回复:7
1金币
image.png663131713.png 在这里点击向下插入行 列表无法自动扩展 ,使用sheet.tables.resize 方法设置表格区域也没有效果,请问这个问题要怎么处理

最佳答案

查看完整内容

在insertRowsBehind命令内部对table进行判断,然后resize table的区域。主要代码如下: 完整代码请参考附件demo。

7 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-8 13:29:37
来自 6#
在insertRowsBehind命令内部对table进行判断,然后resize table的区域。主要代码如下:
  1. spread.commandManager().register("insertRowsBehind",
  2.                 {
  3.                     canUndo: true,
  4.                     execute: function (context, options, isUndo) {
  5.                         var Commands = GC.Spread.Sheets.Commands;
  6.                         // 在此加cmd
  7.                         options.cmd = "insertRowsBehind";
  8.                         if (isUndo) {
  9.                             Commands.undoTransaction(context, options);
  10.                             return true;
  11.                         } else {
  12.                             var sheet = spread.getActiveSheet();
  13.                             sheet.suspendPaint();
  14.                             // 注意:需要在options中定义sheetName,否则撤销行为可能无效。
  15.                             options.sheetName = sheet.name();
  16.                             Commands.startTransaction(context, options);
  17.                             var sels = sheet.getSelections();
  18.                             if (sels && sels.length > 0) {
  19.                                 for (var i = 0; i < sels.length; i++) {
  20.                                     var sel = sels[i];
  21.                                     var row = sel.row;
  22.                                     var rowCount = sel.rowCount;
  23.                                     sheet.addRows(row + 1, rowCount);
  24.                                     // 判断如果在table区域内新增行,且设置了允许table扩展,则将新增行扩展table区域
  25.                                     var table = sheet.tables.all()[0];
  26.                                     var startRow = table.range().row;
  27.                                     var endRow = table.range().row + table.range().rowCount - 1;
  28.                                     var newRange = new GC.Spread.Sheets.Range(table.range().row,table.range().col,table.range().rowCount + 1,table.range().colCount);
  29.                                     if(startRow <= (row + 1) <= endRow && table.allowAutoExpand() == true ) {
  30.                                         console.log("aa");
  31.                                         sheet.tables.resize(table, newRange);
  32.                                        
  33.                                     }
  34.                                 }
  35.                             }
  36.                             sheet.resumePaint();
  37.                             Commands.endTransaction(context, options);
  38.                             return true;
  39.                         }
  40.                     }
  41.                 });
复制代码
完整代码请参考附件demo。

自定义右键菜单-向下插入行.html

5.97 KB, 下载次数: 186

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-8 13:42:08
2#
您好,
您是如何实现的向下插入行,请将相关参考链接提供下,这边先本地测试尝试复现此问题。
回复 使用道具 举报
迷路的麋鹿
金牌服务用户   /  发表于:2022-8-8 13:52:52
3#
spread.commandManager().register("insertRowsBehind",
  {
    canUndo: true,
    execute: function (context, options, isUndo) {
      var Commands = GC.Spread.Sheets.Commands;
      // 在此加cmd
      options.cmd = "insertRowsBehind";
      if (isUndo) {
        Commands.undoTransaction(context, options);
        return true;
      } else {
        var sheet = that.state.spread.getActiveSheet();
        // 注意:需要在options中定义sheetName,否则撤销行为可能无效。
        options.sheetName = sheet.name();
        Commands.startTransaction(context, options);
        var sels = sheet.getSelections();
        if (sels && sels.length > 0) {
          for (var i = 0; i < sels.length; i++) {
            var sel = sels;
            var row = sel.row;
            var rowCount = sel.rowCount;
            sheet.addRows(row + 1, rowCount);
          }
          let tables = sheet.tables.all()
          for(let j in tables) {
            console.log(tables[j].name())
            let range = tables[j].range()
            if(row>=range.row && row <= (range.row + range.rowCount - 1)){
              debugger
              sheet.tables.resize(tables[j], new GC.Spread.Sheets.Range(range.row,range.rowCount + rowCount + 10,range.col,range.colCount))
            }
          }
          // sheet.copyTo(row + 1, 0, row, 0, 1, sheet.getColumnCount(), GC.Spread.Sheets.CopyToOptions.style);
        }

        Commands.endTransaction(context, options);
        that.$store.dispatch('setsheetdisabled')
        // that.$store.commit('setConfigByinsertcell',{
        //   type:'addRows',
        //   sheet:sheet,
        //   tag:sheet.tag(),
        //   row:row+1,
        //   count:sels
        // })
        return true;
      }
    }
  });
回复 使用道具 举报
迷路的麋鹿
金牌服务用户   /  发表于:2022-8-8 13:54:24
4#
就是参考组件版本的例子写的
回复 使用道具 举报
迷路的麋鹿
金牌服务用户   /  发表于:2022-8-8 13:55:41
5#
插入代码时候 点确定没反应  不好意思 直接复制的
回复 使用道具 举报
迷路的麋鹿
金牌服务用户   /  发表于:2022-8-8 17:15:44
7#
好的我参考一下
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-8 17:40:27
8#
有问题继续交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部