实用教程丨如何将实时数据显示在前端电子表格中(二)

本文由葡萄城技术团队于博客园原创并首发
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

前言

在如何将实时数据显示在前端电子表格中(一)一文中,我们讲述了如何通过WebSocket从Finnhub.IO获取实时数据,那么本文重点讲述如何使用基本的 SpreadJS 功能来进行数据展示。

在本教程中,我们将使用 Node.JS Express 和 WebSocket,因此请确保从此处安装最新版本。我们还将使用 Visual Studio Code,因此以管理员身份运行它,以便 NPM 命令可以在终端中运行。其中,SpreadJS 使用的版本为SpreadJS V16.0。

整体的操作步骤包含:

1、设置应用程序(可关联至 如何将实时数据显示在前端电子表格中(一))

2、连接到数据源(可关联至 如何将实时数据显示在前端电子表格中(一))

3、使用 SpreadJS 中的数据

4、为折线图添加数据

5、添加折线图

6、运行程序

使用 SpreadJS 中的数据

在了解每个功能之前,需要先解释一下程序的主要结构。本例中共包含两张数据表,第一张为“Stock_Ticker”,第二张为“Data_Sheet”。数据可以通过单元级数据绑定直接绑定到 SpreadJS 实例中的第一个工作表“Stock_Ticker”。

“Data_Sheet”是自程序启动以来积压的股票开盘价。通常最好是跟踪自特定日期以来记录的值,但为了简化此程序,本例中仅基于程序开始时间,大约有十个最近的值。值的积压就是折线图需要显示的内容。

当在设计器中定义了模板并且格式与数据源的格式相匹配时,就可以使用“bindData”函数中调用的setDataSource 函数在工作表中进行设置。

此外,还可以为工作表“Data_Sheet”设置数据源,并能够从数据中自动生成列,因为我们不关心该工作表上的格式:

// Bind the data source for both of the sheets
function bindData() {
activeSheet.setDataSource(new GC.Spread.Sheets.Bindings.CellBindingSource(dataSource));
dataSheet.autoGenerateColumns = true;
dataSheet.setDataSource(lineData);
}

为折线图添加数据

下一个要定义的函数是“addLineData”函数,它使用本教程前面定义的数组,并在每次从数据源接收到新值时为其添加一个值(如果该值与之前的值不同):

// Add data with each update for the line chart
function addLineData(lastPrice) {
if (lineData.length >= lineDataMaxSize)
lineData.shift();
stockCounter++;
// Only add the data to the list for the line chart if the data has changed
if (lastPrice != lineData[lineData.length-1].Value) {
lineData.push({ Value:lastPrice });
}
}

添加折线图

我们可以通过在绑定到 lineData 数据源的“Data_Sheet”工作表中指定的单元格范围来创建折线图。我们还可以更改标题、轴、数据标签、图例和图表区域的格式——所有这些都在“addChart”函数内:

// Add the line chart
function addChart() {
// Define the area to load the chart into
var startCellRect = activeSheet.getCellRect(11, 1);
var endCellRect = activeSheet.getCellRect(24, 9);
var chartStart = {
x: startCellRect.x,
y: startCellRect.y
};
var chartArea = {
width: endCellRect.x-startCellRect.x,
height: endCellRect.y-chartStart.y
}
chart = activeSheet.charts.add('line',
GC.Spread.Sheets.Charts.ChartType.line,
chartStart.x,
chartStart.y,
chartArea.width,
chartArea.height,
'Data_Sheet!$A$1:$A$' + lineDataMaxSize
);

chart.allowMove(false);

// Set the title of the chart
chart.title({
text: activeSheet.getValue(2,1),
color: "white"
});

 

// Change the values on the y-axis to show changes easier
// Hide the x-axis values, we only care about changes, not specific time values
chart.axes({
primaryValue: {
min: openPrice - chartAxisRange,
max: openPrice + chartAxisRange
},
primaryCategory: {
visible: false
}
});

// Add data labels to the chart
chart.dataLabels({
color: "white",
format: "0.00",
position: GC.Spread.Sheets.Charts.DataLabelPosition.above,
showValue: true
});

// Hide the legend; there is only one series used in this chart
chart.legend({
visible: false
});

// Change the color of the chart
chart.chartArea({
backColor: "black",
color: "white"
})
}

运行程序

添加所有代码后,运行程序就很容易了。在 Visual Studio Code 中打开终端并键入:

node index.js

然后在网络浏览器中导航到 localhost:3000:

 

从下拉菜单中选择一只股票以加载数据:

 

至此,一个在 SpreadJS 中使用实时数据源的简单示例就完成啦。借助 SpreadJS 中图表和数据绑定的强大功能,您可以做的不仅仅是显示数据。想要尝试该功能或查看 SpreadJS 的其他强大功能,可前往葡萄城官网立即下载试用版。



本文是由葡萄城技术开发团队发布,转载请注明出处:葡萄城官网


本文转载于网络 如有侵权请联系删除

相关文章

  • 怎么进行jdk环境变量配置?jdk环境变量配置有什么作用?

    jdk是javadevelopmentkit的缩写,是一种针对java的程序员的可以进行软件开发的工具包。初学java的程序员都知道,想要学习java必须要先安装jdk,但是在安装完成后需要配置三个环境变量才能够正常使用,也就是平时所说的jdk环境变量配置,那么应该怎样进行jdk环境变量配置呢?下面为大家介绍jdk环境变量配置的相关问题。jdk环境变量配置怎么进行jdk环境变量配置下面将以windows10系统和jdk15为例,为大家介绍如何进行jdk环境变量配置。首先,右键点击“此电脑”,选择属性-高级系统设置,再点击“环境变量”,在系统中找到环境变量后,双击path并新建,同时输入自己电脑中jdk安装的位置,再核对信息,点击确定即可。接着同时按下wiondows键和R键并输入cmd,按下回车键,并在弹出的信息框里输入java-version、按下回车,如果能正确输出版本信息等,这说明jdk环境变量配置已经完成、jdk安装正确。jdk环境变量配置有什么用在上文中已经说过,jdk需要配置三个环境变量,分别是JAVA_HOME、classpath、path三个,下面分别介绍这三个环境变量

  • Centos8安装gitlab

    背景:本来吧gitlab都是搞在kubernetes上面的。公司内网环境需要一个内部的gitlab.然后就准备搭建一个。另外跟着阳明大佬的课程做gitlab触发jenkins任务的时候我的jenkins想拿内网的去做,没法去触发啊。正好搞一个内网的去玩一下呢。线上的都是onkubernetes的不想太随意去各种玩了......一.centos8安装gitlab过程1.下载rpm包很多可以下载的。另外gitlab成立了中国的独立的公司极狐?也可以玩一下。不过最近的极狐都被华为造车的的极狐的风头盖过去了吧......下载源选择了清华的源下载了当前最新的版本gitlab-ce-13.9.6-ce.0.el8.x86_64.rpmwgethttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/gitlab-ce-13.9.6-ce.0.el8.x86_64.rpm复制2.安装rpm包rpm-ivhgitlab-ce-13.9.6-ce.0.el8.x86_64.rpm复制显示缺少依赖yuminstallpolicycoreutils-pyt

  • 2021-02-09:如何删除一个链表的倒数第n个元素?

    2021-02-09:如何删除一个链表的倒数第n个元素?福哥答案2021-02-09:1.创建虚拟头元素,虚拟头元素的Next指针指向头元素。2.根据快慢指针求倒数第n+1个元素,假设这个元素是slow。3.设置元素slow的Next指针。slow.Next=slow.Next.Next。4.返回虚拟头元素的Next指针。代码用golang编写,代码如下:packagemain import"fmt" typeListNodestruct{ Valint Next*ListNode } funcmain(){ head:=&ListNode{} head.Val=1 head.Next=&ListNode{} head.Next.Val=2 head.Next.Next=&ListNode{} head.Next.Next.Val=3 head.Next.Next.Next=&ListNode{} head.Next.Next.Next.Val=4 ret:=head forret!=nil{ fmt.Print(ret

  • 重点收藏:关于数据库版本的生命周期规划

    这是学习笔记的第2270篇文章读完需要5 分钟速读仅需3分钟整理了如下数据库的产品周期信息:OracleMySQLMariaDBPerconaRedisMongoDBPostgreSQL 1.Oracle 在MOS官方文章:ReleaseScheduleofCurrentDatabaseReleases(文档ID742060.1)大体分来,支持的强度分为三个级别:PremierSupport(最高优先级的支持),ExtendedSupport(中等优先级的支持),SustainingSupport(最低优先级的支持)2.MySQLMySQL版本https://dev.mysql.com/doc/relnotes/mysql/8.0/en/ 3.MariaDBhttps://mariadb.org/about/#maintenance-policy4.Perconahttps://www.percona.com/services/policies/percona-software-platform-lifecycle5.Redishttps://docs.redislabs.com/la

  • 网课频遭吐槽?数据背后隐藏这些真相

    连续12天登上微博热搜榜,平均一天3个热搜关键词,最高纪录一天有8个相关热搜上榜,“网课”从未像现在这样受人关注。当大量中小学生因延期开学从线下涌上网络,开始这场特殊的学习之旅时,未承载过如此重担的网课尽管被吐槽居多,但在学生、老师、家长、教育机构历经了近20多天的网课洗礼后,关于网课,不再只有“翻车”和“尴尬”的评价。实际上,在一些学生为教育APP狂打一星的背后,是学而思网校、猿辅导等众多一线在线教育机构已能为其提供丰富优质的教学工具和教学内容。一根网线,一块屏幕就可以搭建起线上课堂,满足教学需要。近日,以“网课”及各大在线教育APP为关键词进行搜索,观察了近一个月微博、APP等平台的日活数情况,从数据角度盘点隐藏在网课段子背后,用户评价发生了什么样的转变?当传统教育模式历经线上“翻车”,以学而思网校为代表的众多在线教育机构提供的免费公益课程到底表现如何?网课:从尴尬、翻车到缓解焦虑“课程与在校期间‘神同步’,难度与学校保持一致,由名校老师、全国特级教师领衔。”“在‘文化课’之外,体育、美术、编程、围棋、通识、科学等课程应有尽有。”“还有名家大师讲述《红楼梦》、《西游记》、清朝十大人

  • kubernetes集群资源管理之Node、Namespace、Lable、Annotation、Taint和Toleration

    NodeNode是kubernetes集群的工作节点,可以是物理机也可以是虚拟机。Node的状态Node包括如下状态信息:Address HostName:可以被kubelet中的--hostname-override参数替代。ExternalIP:可以被集群外部路由到的IP地址。InternalIP:集群内部使用的IP,集群外部无法访问。Condition OutOfDisk:磁盘空间不足时为TrueReady:Nodecontroller40秒内没有收到node的状态报告为Unknown,健康为True,否则为False。MemoryPressure:当node没有内存压力时为True,否则为False。DiskPressure:当node没有磁盘压力时为True,否则为False。Capacity CPU内存可运行的最大Pod个数Info:节点的一些版本信息,如OS、kubernetes、docker等Node管理禁止pod调度到该节点上kubectlcordon<node>复制驱逐该节点上的所有podkubectldrain<node>复制该命令会删除该

  • 如何使用jMeter对某个OData服务进行高并发性能测试

    ForprojectreasonIhavetomeasuretheperformanceofODataservicebeingaccessedparallelly.AndIplantousetheopensourcetoolJMetertogenerateahugenumberofrequestinparallelandmeasuretheaverageresponsetime.SinceIamabeginnerforJMeter,IwritedownwhatIhavelearnedintothisblog.IwillcontinuetoexplorertheadvancedfeatureofJMeterinmydailywork.我们公司某团队开发了一个OData服务,现在我接到任务,要测试这个服务在高并发访问场景下的性能指标,比如5万个请求同时到来后,每个请求的平均响应时间,因此我选择了jMeter这个好用的工具来模拟高并发请求。DownloadJMeterfromitsofficialwebsite:http://jmeter.apache.org/Gototheinstalla

  • 原型设计工具Axure RP9下载、汉化操作说明(赠授权码)

    Axure是产品经理、交互设计常用的一款原型设计工具,能实现比较复杂的交互效果。其实在功能上是十分齐全的,并且其交互的样式也比较多样,主要是通过动态面板、函数、中继器等几个模块就几乎可以实现任何常见的交互效果,所以说Axure在制作PC端原型图上是占有非常强大的优势的;除此之外,Axure还拥有强大的编辑功能,使得你所制作的原型更具生动化!你还可以将常用的交互和组件进行打包!同时支持windows及mac系统安装,对于比较大的项目还能实现团队共同协作设计同一个项目原型。 ​ 下载地址 WINDOWS版下载地址:点击下载 MAC版下载地址:点击下载 汉化包下载地址:点击下载 请关注公众号【PM老猫】,留言输入“arp9”获取提取码 Windows汉化包操作说明  通过以上链接下载语言包之后,将解压后的lang文件夹添加到软件的安装目录中。 32位系统:C:\ProgramFiles\Axure\AxureRP9 64位系统:C:\ProgramFiles(x86)\Axure\AxureRP9 Mac汉化包操作说明 单中选择:前往--应用程序--右键点击程序图标-

  • 【2022-10-30】连岳摘抄

    23:59 才华就是缓慢的耐心。                                                  ——福楼拜 许多人在规划自己事业、爱情与人生时,没有、或极端忽视一个关键的变量:韧性。所谓的韧性,就是在最坏情况发生时,你仍然可以存活。用韧性来重新思考个人的小问题,应注意什么呢?一是乐观。乐观就是个人的核武器,越是冬天越能熬,越是不景气越愿意做基础性的布局。得也患,失更患,悲观者永无宁日,天天被真假不分的焦虑牵着鼻子瞎跑。乐观不全是天性,更多是后天习得的文化。二是务实

  • nginx出现 “414 request-uri too large”

    nginx出现“414request-uritoolarge” 在请求查询的时候使用了Get方法,由于拼接的url过长,导致nginx出现了“414request-uritoolarge”错误。 出现这种问题可以按照如下解决: 在nginx的nginx.conf修改如下参数的: client_header_buffer_size512k; large_client_header_buffers4512k; 复制  参考文章:http://www.nginx.cn/913.html 开发请求一个非常长的请求参数 https://jiaju.jyall.me/backend/dish/getSales/?dishId=167271&dishId=166975&dishId=166509&dishId=167088&dishId=166976&dishId=159375&dishId=167099&dishId=167100&dishId=166972&dishId=166984&dishId=16

  • 1093 - You can&#39;t specify target table &#39;account&#39; for update in FROM clause

      目的:查询一张表的相同的两条数据,并删除一条数据。 分析先查询出相同的数据,然后删除 查询相同的数据  SELECTa.idFROMaccountaGROUPBYa.usernameHAVINGCOUNT(a.username)>1;   DELETEFROMaccountWHEREid=(SELECTa.idFROMaccountaGROUPBYa.usernameHAVINGCOUNT(a.username)>1); 1093-Youcan'tspecifytargettable'account'forupdateinFROMclause 不能为FROM子句中的更新指定目标表'account'。   修改后: DELETEFROMaccountWHEREid=  (SELECTt.idfrom (SELECTa.idFROMaccountaGROUPBYa.usernameHAVINGCOUNT(a.username)>1)t); 每件事都需要坚持!

  • 沉淀一年,我想推荐这些书给你

      将近一年没有写博客,前面一直比较忙,加上一些事情耽搁了,然后自己也在一直思考沉淀,毕业2年的心态跟第一年又不太一样了,不过经验、知识也不一样,个人成长许多,沉淀这一年,我想推荐这些书给你。   一、《Redis开发与运维》     是不是redis只会set、get,然后在加上一个过期时间就吊炸天了,只能说你太幼稚,想不想知道里面一些底层的原理呢,Redis怎么持久化、过期的策略、复制、哨兵、集群、设计与运维等等。看这本书就对了,我觉的这本书特别适合对缓存只会set、get操作同学,能够让你的技术深度更进一步。豆瓣评分9.0 二、《从Paxos到Zookeeper》     炸了,zookeeper好多同学可能连创建节点和删除节点这些都没有操作过,我也是属于这一类,只会启动。那我推荐这本书可以让你更了解zookeeper,知道什么永久节点和临时节点、有序节点这小case,更能让你知道paxos算法,zap协议,让你知道怎么使用、部署zookeeper,zookeeper的使用场景、以及zookeeper的一些原理,例如:zookeeper选举机制

  • 自己作图分析分布式技术架构演化的常用套路

    目录 背景 1、单机架构 2、应用服务与数据服务分离 3、应用服务器集群架构 3.1应用服务器集群架构下的Session管理 4、数据库读写分离 5、利用缓存技术进行加速 6、分布式数据库系统与分布式文件系统 7、NoSQL数据库作为补充 8、使用搜索引擎 9.分布式服务 9.1微服务 分布式架构设计常用的中间件技术 背景 大型互联网网站及应用是随着业务的逐步发展与不断创新慢慢演化而成的。在这个进化过程中,会有一些通用的问题需要解决,也会有一些常规的中间件需要构建,本文将对这个演化过程中涉及的分布式技术架构常用套路进行说明与分析。 1、单机架构 上线初期,负载较小,应用程序、数据库、文件等所有的资源都部署在一台服务器上。 架构上一般采用LAMP(Linux+Apache+Mysql+PHP)技术或JavaMVC技术。 2、应用服务与数据服务分离 随着访问量的不断增多,服务器的负载持续升高,越来越多的数据及文件资源导致存储不足,这时候需要将应用服务与数据服务进行分离。 应用和数据分离后,不同特性的服务器承担不同的角色,并发处理能力和数据存储空间得到了改善

  • 视频流操作

    FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、MacOSX等。这个项目最早由FabriceBellard发起,2004年至2015年间由MichaelNiedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"FastForward"。FFmpeg编码库可以使用GPU加速。 有什么不同见解可以在评论区共同讨论

  • Introduction of Build Tool/Maven, Gradle

    什么是buildtool: buildtool是可以自动由源代码创建可执行的应用程序的程序。Building包括编译、链接和打包代码成一个可用的或可执行形式。在小型项目,开发人员常常会手动调用构建过程。在更大的项目中这是不实用的,那样会很难跟踪需要构建什么,在什么顺序和依赖关系构建的过程。使用自动化工具允许构建过程更一致。 为什么使用buildtool: 日常开发中我们当然不会每次都在终端中使用命令一个个编译执行文件,我们只需要在IDE中点击运行按钮,IDE就会帮助我们执行构建项目的全过程,但是使用IDE构建有一个很严重的缺陷就是迁移成本问题,有可能两个团队使用的IDE不同,导致相互项目交接时成本极高,还有就是一个项目在本地开发环境和集成测试环境都需要构建项目,很显然IDE不能帮我们解决这个问题。 MAVEN: Maven是一个项目管理工具,它包含了一个项目对象模型一组标准集合,一个项目生命周期一个依赖管理系统和用来运行定义在生命周期阶段中插件目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一

  • coco2017 Dataset EDA

    Github仓库:gy-7/coco_EDA(github.com) 对coco数据集的分析,近期忙着写论文,空余时间很少能写博文了。 EDA的代码放在结尾了,Github仓库里也有。仓库里还有其他的一些EDA分析,不定时更新。 训练集所有类别的数量分布情况: 训练集所有类别的尺寸分布情况: 验证集所有类别的数量分布情况: 验证集所有类别的尺寸分布情况: EDA代码: importos importseabornassns importpycocotools.coco importmatplotlib.pyplotasplt root_dir=os.getcwd() train_ann_fp=os.path.join(root_dir,'annotations','instances_train2017.json') val_ann_fp=os.path.join(root_dir,'annotations','instances_val2017.json') classCOCO_EDA: def__init__(self,json_file,type='train'):

  • Beyond Compare软件使用方法

          我们常常会遇到一些文件需要进行比较,特别是一些代码、文本、网页或者是文件夹之间,我们非常需要一款工具可以清晰地分析出它们之间的全部差异,便于对其进行修改或参考。      BeyondCompare是一款经典老牌且优秀的专业级文件比较软件,我们常常会在一些开发高手和前辈的推荐中听到它的大名。使用它可以很方便地对比出两个文件夹或文件(如代码/网页/文本文件等)之间的不同之处,它会把有差异的每一个行或每一个字均用颜色标注出来,你不仅可以直观地查看、定位全部差异点,还能非常方便地修改它们……  首先我们来看下文件夹的对比。小编为了测试,就新建了两个文件夹,里面的文件有的相同,有的不同。用软件打开两个文件夹后我们可以看到黑色,红色和蓝色三种颜色的文件。其中黑色代表两侧文件相同,蓝色代表其中一侧没有另一侧文件,红色代表两边都有这个文件,但是不完全相同。对于黑色和红色大家应该有了个初步的了解,下面我们就来看下蓝色的文件,上面也介绍了,蓝色的文件代表

  • 统计一个字符串中每个字符出现的次数和井字棋盘游戏

      练习有一个小程序,计算一个字符串中每个字符出现的次数。 代码如下: #统计一个字符串中每个字符出现的次数messages='ItwasabrightcolddayinFeb23,andtheclockswerestrikingtwelve'count={}foriinmessages:count.setdefault(i,0)count[i]=count[i]+1print(count)执行结果如下:复制   井字棋盘数据结构建模例子:代码如下:复制 #井字棋盘,数据结构建模chessboard={'t-l':'','t-c':'','t-r':'','c-l':'','c-c':'','c-r':'','b-l':'','b-c':'','b-r':''}defprintboadr(board):print(board['t-l']+'|'+board['t-c']+'|'+board['t-r'])print('-*-*-')print(board['c-l']+'|'+board['c-c']+'|'+board['c-r'])print('-*-*-'

  • Nginx+Keepalived实现高可用站点

    Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。 VRRP协议 VRRP全称VirtualRouterRedundancyProtocol,即虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(RouterGroup),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。 在VRRP协议实现里,虚拟路由器使用00

  • EXCEL发送为只读打开

    (1)进入文件夹: C:\Users\xxx\AppData\Roaming\Microsoft\Windows\SendTo (2)新建快捷方式 (3)输入: "C:\ProgramFiles\MicrosoftOffice\Office16\EXCEL.EXE"-r (4)打开文件:右键→发送到(快捷方式)

  • STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq!=RT_NULL)assertfailedatrt_mq_recv:2085的问题讨论:http://www.rt-thread.org/phpBB3/topic2577.html, STM32串口只发送数据,不能接收数据的问题讨论:http://www.rt-thread.org/phpBB3/topic2577-10.html复制  

相关推荐

推荐阅读