首页 > 其他分享 >SpreadJS 在数据填充时的公式填充方案

SpreadJS 在数据填充时的公式填充方案

时间:2024-11-05 09:22:26浏览次数:4  
标签:SpreadJS 填充 公式 Spread GC Sheets sheet let baseCol

需求介绍

很多用户使用了 SpreadJS 的数据填报功能。大致用法为:设计模板,填充数据源。在这个过程中,可能会出现模板中设置了公式,而在数据源填充时,公式没有携带下来的问题。

比如我们定义一个模板:

接下来使用setDataSpurce()填充数据源,填充后,发现只有一行有公式值,其他行无数据

那么,我们该做一些什么操作呢?或者有哪些方案呢?
目前有四种方案,分别fillAutocopyToclipboardPastesetColumnDataFormula

我们分别看一下这四种方案的具体使用用法及性能。

我们先获取下table区域,定义baseRow ,baseCol

 let row = table.range().row
        let baseRow = row + 1;
        let baseCol = 4
        let rowCount = 0

然后在setDataSource后,修改rowCount值

        document.getElementById('btn6').addEventListener('click', function () {
            sheet.setDataSource(new GC.Spread.Sheets.Bindings.CellBindingSource(data2))
            rowCount = table.range().rowCount
        })

一、方案

1、fillAuto

let start = new GC.Spread.Sheets.Range(baseRow, baseCol, 1, 1)
            let end = new GC.Spread.Sheets.Range(baseRow, baseCol, rowCount - 1, 1)
            sheet.fillAuto(start, end, {
                fillType: GC.Spread.Sheets.Fill.FillType.auto,
                series: 0,
                direction: GC.Spread.Sheets.Fill.FillDirection.down
            });

2、copyTo

 for (let r = baseRow + 1; r < row + rowCount; r++) {
                sheet.copyTo(baseRow, baseCol, r, baseCol, 1, 1, GC.Spread.Sheets.CopyToOptions.formula)
            }

3、clipboardPaste

 let fromRanges = [new GC.Spread.Sheets.Range(baseRow, baseCol, 1, 1)]
            let pastedRanges = [new GC.Spread.Sheets.Range(baseRow + 1, baseCol, rowCount - 2, 1)]
            spread.commandManager().execute({
                cmd: "clipboardPaste",
                sheetName: sheet.name(),
                fromSheet: sheet,
                fromRanges,
                pastedRanges,
                isCutting: false,
                clipboardText: "",
                pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.formulas
            });

4、setColumnDataFormula

table.setColumnDataFormula(baseCol, sheet.getFormula(baseRow, baseCol));

上述四种方案均能实现公式填充,结果如下:

二、性能对比

1、100条
那么,我们接下来看下这四种方案的性能吧,首先我们设置100条数据源,

 let sales = [], dataLength = 100
        for (let i = 0; i < dataLength; i++) {
            sales.push({orderDate: '1/6/2013', item: 'book', units: '95', quantity: 1.99})
        }
        sheet.setRowCount(dataLength + 1)

然后设置一个按钮,在每一种方案执行后,用来清除数据。

  document.getElementById('btn5').addEventListener('click', function () {
            sheet.clear(2, 4, sheet.getRowCount(), 1,GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
        })

结果如下:

100条数据的情况下,四种方案的性能都相差不大。

2、1000条
接下来,我们设置10000条数据,将dataLength 改为1000
结果如下:

3、10000条
接下来,我们设置10000条数据,将dataLength 改为10000
结果如下:

观察上图,我们发现setColumnDataFormula与clipboardPaste性能较好,而fillAuto性能最差。

4、10000条
我们接下来将数据量改为10万条数据,观察setColumnDataFormula与clipboardPaste性能

汇总以下这些数据:

总结

由上面的内容可以看出,在数据量不大的情况下,四种方式差不多,但在数据量较大的情况下,建议使用setColumnDataFormula方式填充公式。

扩展链接:

【干货放送】财务报表勾稽分析要点,一文读尽!

为什么你的财务报表不出色?推荐你了解这四个设计要点和!

纯前端类 Excel 表格控件在报表勾稽分析领域的应用场景解析

标签:SpreadJS,填充,公式,Spread,GC,Sheets,sheet,let,baseCol
From: https://www.cnblogs.com/powertoolsteam/p/18527174

相关文章

  • 【论文复现】神经网络的公式推导与代码实现
    ......
  • 使用Typora添加行内数学公式怎么添加?
    首先需要确认,Typora已经勾选“插入内联公式”选项。具体方法:点击“文件”-->“偏好设置”-->“Markdown”-->“Markdown扩展语法”—>勾选“内联公式(例:$\LaTeX $)”确认以上步骤之后,就可以使用了 单个$:用于表示行内数学公式。例如,$E=mc^2$会被渲染为E=m......
  • Latex公式_数学公式编辑
    目录数学公式编辑Displayingaformula符号与字母SymbolandAlphabet希腊字母Greekalphabet希伯来字母Hebrewalphabet二元运算符Binaryoperations二元关系符Binaryrelations几何符号Geometricsymbols逻辑符号Logicsymbols集合Sets箭头Arrows特殊S......
  • 机器学习与数学公式
    目录在机器学习中,将公式应用到算法程序上主要涉及以下几个步骤:1、数学公式转换成编程逻辑: 2、选择合适的编程语言和工具: 3、使用矩阵运算和优化方法:4、实现算法逻辑:5、将公式封装成函数:结论示例1、线性回归2、均方误差(MeanSquaredError,MSE)3、梯度下降算......
  • 【深度学习】从公式推导来深入理解误差反向传播算法2:《深度学习入门基于Python的理论
    《深度学习入门基于Python的理论与实现》中实现了2层全连接神经网络的代码对MNIST数据集的28x28像素0-9手写数字灰度图像进行分类,本文将重点对代码中的two_layer_net类的gradient函数中的误差反向传播的代码进行公式推导验证。验证小批量数据的交叉熵损失函数对第2层权重......
  • 斐波那契时间序列,精准捕捉市场拐点 MT4免费公式源码!
    指标名称:斐波那契时间序列版本:MT4ver.2.01斐波那契时间序列是一种技术分析工具,通过将斐波那契数列(如1,2,3,5,8,13等)应用于时间轴上,用于预测市场价格的时间周期拐点。斐波那契时间序列在股票、外汇和其他市场分析中常用,帮助预测趋势反转或调整发生的时间节点。斐波那......
  • 供需指标(Supply and Demand ),供给与需求,寻找支撑压力位神器 MT4免费公式!
    指标名称:供给需求指标版本:MT4 ver.2.01供需区域指标基于市场的支撑区和阻力区,非常适合用于外汇交易。这一指标将市场供应和需求的区域划分为更广泛的价格范围,有助于识别长期有效的交易区域。使用指南-供需区域定义:供应区通常形成于价格急剧下跌后,显示出卖压强劲;需求......
  • CodeQL学习笔记(3)-QL语法(模块、变量、表达式、公式和注解)
    最近在学习CodeQL,对于CodeQL就不介绍了,目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记,根据个人知识库笔记修改整理而来的,分享出来共同学习。个人觉得QL的语法比较反人类,至少与目前主流的这些OOP语言相比,还是有一定难度的。与现在网上的大多数所谓CodeQL教程不同,本系列基于......
  • SMO算法 公式推导
    ......
  • java算法:力扣动态规划公式和例子,套这个就够了!
    持续更新…(跟着代码随想录总结的)使用场景:只要数值无限依赖于前面的数值就可以套用这个公式五步法dp数组及下标的含义递推公式dp数组如何初始化遍历顺序打印dp数组经典举例:斐波那契数斐波那契数是:一个数组得的某个数字等于前两个数字之和dp[i]dp[i][j]......