找回密码
 立即注册

QQ登录

只需一步,快速开始

yudian、

初级会员

33

主题

111

帖子

322

积分

初级会员

积分
322
yudian、
初级会员   /  发表于:2023-12-6 11:32  /   查看:1208  /  回复:10
1金币
本帖最后由 Richard.Huang 于 2023-12-8 17:14 编辑



产品:SpreadJS
版本:V16.2.6


image.png703012084.png image.png250279235.png 插入行并复制公式,公式我看没问题,但是计算出来的数据有问题,全部统一计算成一样的值了

最佳答案

查看完整内容

我做了一个简单的代码示例,您参考一下:

10 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-6 11:32:49
来自 9#
我做了一个简单的代码示例,您参考一下:


  1. window.onload = function () {
  2.   let designerConfig = JSON.parse(
  3.     JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig)
  4.   );

  5.   let designer = new GC.Spread.Sheets.Designer.Designer(
  6.     "gc-designer-container",
  7.     designerConfig
  8.   );

  9.   let spread = designer.getWorkbook();

  10.   let sheet = spread.getActiveSheet();

  11.   sheet.setFormula(0, 0, "C1+D1", GC.Spread.Sheets.SheetArea.viewport);
  12.   var start = new GC.Spread.Sheets.Range(0, 0, 1, 1);
  13.   var r3 = new GC.Spread.Sheets.Range(0, 0, 4, 1);
  14.   sheet.fillAuto(start, r3, {
  15.     fillType: GC.Spread.Sheets.Fill.FillType.auto,
  16.     series: GC.Spread.Sheets.Fill.FillSeries.column,
  17.     direction: GC.Spread.Sheets.Fill.FillDirection.down,
  18.   });

  19. };
复制代码


image.png298800353.png
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-6 13:36:59
2#
您好,您这边提供一下这个ssjson文件,我们这边复现后调研一下。
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
yudian、
初级会员   /  发表于:2023-12-6 14:20:36
3#
Joestar.Xu 发表于 2023-12-6 13:36
您好,您这边提供一下这个ssjson文件,我们这边复现后调研一下。

插入行我改成向下插入了

YS02.ssjson

61.5 KB, 下载次数: 52

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-6 17:32:21
4#
您好,我将您提供给我的模板输入了您图中的数据后,没能复现出您的问题:

image.png489470824.png

我这边应该如何复现您的问题呢?

另外,您说的向下插入是什么意思?是重写了插入行的命令吗?
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
yudian、
初级会员   /  发表于:2023-12-6 17:44:43
5#
本帖最后由 yudian、 于 2023-12-6 17:47 编辑
Joestar.Xu 发表于 2023-12-6 17:32
您好,我将您提供给我的模板输入了您图中的数据后,没能复现出您的问题:

是的,我重写了插入命令
回复 使用道具 举报
yudian、
初级会员   /  发表于:2023-12-6 17:51:08
6#
yudian、 发表于 2023-12-6 17:44
是的,我重写了插入命令

   registerInsert(spread) {
      var insertRowsBelow = {
        canUndo: true,
        name: 'insertRowsBelow',
        execute: function(context, options, isUndo) {
          var Commands = GC.Spread.Sheets.Commands
          if (isUndo) {
            Commands.undoTransaction(context, options)
            return true
          } else {
            Commands.startTransaction(context, options)
            var sheet = context.getSheetFromName(options.sheetName)
            sheet.suspendPaint()

            if (options.selections && options.selections.length) {
              var row = options.selections[0].row + 1
              var rowCount = options.selections[0].rowCount
              sheet.addRows(row, rowCount)

              var colCount = sheet.getColumnCount()
              for (var i = 0; i < colCount; i++) {

                var actualStyle = sheet.getActualStyle(row - 1, i)

                sheet.setStyle(row, i, actualStyle)

                sheet.copyTo(row - 1, 0, row, 0, 1, sheet.getColumnCount(), GC.Spread.Sheets.CopyToOptions.formula)
              }
            }
            sheet.resumePaint()

            Commands.endTransaction(context, options)
            return true
          }
        }
      }

      // 注册命令
      spread.commandManager().register('insertRowsBelow', insertRowsBelow)

      // 替换原有插入命令
      function MyContextMenu() {
      }

      MyContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread)
      MyContextMenu.prototype.onOpenMenu = function(menuData, itemsDataForShown, hitInfo, spread) {
        itemsDataForShown.forEach(function(item, index) {
          if (item && item.name === 'gc.spread.insertRows') {
            item.command = 'insertRowsBelow'
          }
        })

      }
      var contextMenu = new MyContextMenu()
      spread.contextMenu = contextMenu
    },
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-7 10:01:31
7#
您好,我注意到您这段代码中存在复制公式的情况,很有可能是因为您复制了上一行的公式到下一行导致了该问题:

image.png826882934.png

建议您这边排查一下看看是否是该原因导致的,如果想要扩展公式,建议您使用自动填充来实现。

具体请参考:https://demo.grapecity.com.cn/sp ... stom-fill#timestamp
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
yudian、
初级会员   /  发表于:2023-12-7 11:05:51
8#
Joestar.Xu 发表于 2023-12-7 10:01
您好,我注意到您这段代码中存在复制公式的情况,很有可能是因为您复制了上一行的公式到下一行导致了该问题 ...

麻烦问下有没有 插入行然后填充公式的示例
回复 使用道具 举报
yudian、
初级会员   /  发表于:2023-12-7 11:41:28
10#
Joestar.Xu 发表于 2023-12-7 11:37
我做了一个简单的代码示例,您参考一下:

好的,谢谢
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部