SpreadJS 在数据填充时的公式填充方案
需求介绍
很多用户使用了 SpreadJS 的数据填报功能。大致用法为:设计模板,填充数据源。在这个过程中,可能会出现模板中设置了公式,而在数据源填充时,公式没有携带下来的问题。
比如我们定义一个模板:
接下来使用setDataSpurce()填充数据源,填充后,发现只有一行有公式值,其他行无数据
那么,我们该做一些什么操作呢?或者有哪些方案呢?
目前有四种方案,分别fillAuto、copyTo、clipboardPaste、setColumnDataFormula
我们分别看一下这四种方案的具体使用用法及性能。
我们先获取下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 在数据填充时的公式填充方案的更多相关文章
- 在服务器上运行db:seed数据填充时,出错的问题解决
在服务器上运行db:seed数据填充时,出错的问题解决 运行composer dump-autoload
- 个人永久性免费-Excel催化剂功能第81波-指定单元格区域内容及公式填充
在日常数据处理过程中,需要对缺失数据进行填充时,按一定逻辑规则进行处理,实现快速填充,规范数据源.此篇给大家带来多种填充数据的场景. 业务使用场景 对各种系统中导出的数据,很多时候存在数据缺失的情况, ...
- chrome浏览器当表单自动填充时,怎么去除浏览器自动添加的默认样式。
参考blog来自 http://segmentfault.com/q/1010000000671971 chrome浏览器当表单自动填充时,怎么去除浏览器自动添加的默认样式. 一.发现该问题的原因-是 ...
- CGA填充算法之种子填充算法
CGA填充算法之种子填充算法 平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界 (也可以是没有边界,只是给出指定颜色),要求将边界范围内的所有象素单元都修改成指定的颜 ...
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)
上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细 ...
- C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- 当插入数据失败时,防止mysql自增长字段的自增长的方法
问题描述: 当mysql设置了自增长字段时(注意:一个表中只能设置一个自增长字段,可以不是主键,但必须是键 ),如果插入数据失败,那么自增长字段仍然会占用这个自增长值,再次成功插入数据时就会造成断层. ...
- jquery ajax请求方式与提示用户正在处理请稍等,等待数据返回时loading的显示
1.jquery ajax请求方式与提示用户正在处理请稍等 为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示.我们可通过设置$.ajax()下的参数beforeSend()来实 ...
- 在VS2012后的版本中做数据报表时,提示尚未指定报表“Report1”的报表定义
有一群的朋友在用VS2012做数据报表时,老是提示 本地报表处理期间出错. 尚未指定报表“Report1”的报表定义 未将对象引用设置到对象的实例. 我看了一下,步骤没错,我用VS2010做了一下,一 ...
- Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)
Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...
随机推荐
- Linux CentOS 7 安装 Kafka 2.8.2 - 单机版 & JDK 11 & 切换 JDK版本
目录 安装 JDK 11 安装 Kafka 下载 Kafka 2.8.2 防火墙 修改配置 运行测试 自启动 验证端口 Kafka 从 2.6.0 开始,默认使用 Java 11 , 3.0.0 开始 ...
- 低版本安卓home assistant网页浏览器
试了很久 一直有问题的一点 , 使用普通浏览器加载不出来登录界面 只能加载出icon 然后就没反应了 考虑到了webview的问题 但是没想到安卓5.0之前是固定且不可升级的webview 从 And ...
- Windows 新建用户帐户
Windows 近年来大力推广使用 Microsoft 帐户登录 Windows.然而,如果你这么做了,Windows 会取你登录帐户的前 5 个字母作为你的本地用户名,非常的丑陋.更难受的是本地用户 ...
- JMonkeyEngine3 Android 旋转 、放大、缩小一个方块 demo 版本3.5.2-stable
1. Class,里面是旋转的逻辑,很简陋,可以自己优化 import android.util.Log; import com.jme3.app.SimpleApplication; import ...
- 【YashanDB知识库】离线升级一章22.2不支持直接升级到23.1
[标题]离线升级一章22.2不支持直接升级到23.1 [问题分类]文档问题 [关键词]YashanDB, 离线升级, 版本兼容 [问题描述]文档中提到22.2版本不支持直接升级到23.1. [问题原因 ...
- 【YashanDB知识库】调整NUMBER精度,再执行统计信息收集高级包偶现数据库异常退出
[问题分类]功能使用 [关键字]NUMBER类型精度修改,统计信息收集 [问题描述]存量的表将NUMBER类型的字段精度从小精度调整为大精度时,数据库收集这张业务表的统计信息时,会导致数据库异常退出. ...
- Angular 18+ 高级教程 – Change Detection & Ivy rendering engine
前言 不熟悉 Angular 的朋友可能不了解 Change Detection 和目前当火的 Signal 之间的关系,以至于认为现在应该要学习新潮流 Signal 而不是已经过时的 Change ...
- ASP.NET Core – Custom Input formatters For Partial Update and Handle Under-posting
前言 之前的文章有谈过关于 ASP.NET Core 处理 under-posting 的方式. 它会使用 class default value. 许多时候这可能不是我们期望的. 比如当我们想要 p ...
- 致敬传奇 Kruskal 重构树题硬控我三小时
NOI2018 归程 存边的数组拿来干两件事,忘了清空了,其实最好开两个的 dfs 没开 vis 导致不知道为什么出现的绕圈 倍增的 fa[i][j] 定义的时候前面是 \(2^{i}\) 写着写着记 ...
- 课时09:Metasploit使用基础
下载地址:https://docs.metasploit.com/docs/using-metasploit/getting-started/nightly-installers.html Explo ...