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

实用教程,如何,实时,数据,显示,前端,电子表格 · 浏览次数 : 113

小编点评

**使用SpreadJS实时数据图表示例** 本文介绍了如何使用Node.JS Express和WebSocket连接到Finnhub.IO获取实时数据并将其绑定到SpreadJS中,创建图表。 **步骤:** 1. **设置应用程序** 2. **连接到数据源** 3. **使用SpreadJS数据绑定** 4. **为折线图添加数据** 5. **添加折线图** 6. **运行程序使用SpreadJS数据在了解每个功能之前,需要先解释程序的主要结构** **代码示例:** ```javascript // Bind the data source for both of the sheets activeSheet.setDataSource(new GC.Spread.Sheets.Bindings.CellBindingSource(dataSource)); dataSheet.autoGenerateColumns = true; dataSheet.setDataSource(lineData); // Add data with each update for the line chart function addLineData(lastPrice) { if (lineData.length >= lineDataMaxSize) lineData.shift(); stockCounter++; if (lastPrice != lineData[lineData.length - 1].Value) { lineData.push({ Value: lastPrice }); } } // 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}; // Create the line chart 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); // 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 chart.axes({primaryValue: {min: openPrice - chartAxisRange, max: openPrice + chartAxisRange}, primaryCategory: {visible: false}}); // Add data labels to the chart 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 chartchart chart.legend({visible: false}); // Change the color of the chartchart.chartArea chart.chartArea({backgroundColor: "black", color: "white"}); } // Run the program addChart(); ``` **注意:** * `dataSource`是用于数据绑定的变量。 * `lineData` 是用于折线图的数据源。 * `stockCounter` 用于记录图表中的股票数量。 * `chartAxisRange` 是用于设置yAxis的范围。

正文

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

前言

在如何将实时数据显示在前端电子表格中(一)一文中,我们讲述了如何通过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 的其他强大功能,可前往葡萄城官网立即下载试用版。

与实用教程丨如何将实时数据显示在前端电子表格中(二)相似的内容:

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

本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 数据(包括股票、天气和体育比分)在不断更新为新信息时最为有用。比较通用的 JavaScript 电子表格组件,可以轻松地使用、显示并通过数据绑定提供实时数据更新。

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

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在如何将实时数据显示在前端电子表格中(一)一文中,我们讲述了如何通过WebSocket从Finnhub.IO获取实时数据,那么本文重点讲述如何使用基本的 Spre

[转帖]实用工具汇总

https://www.bilibili.com/read/cv10988196?spm_id_from=333.999.0.0 Cockpit: Linux 服务器的 Web 控制台 对于Ubuntu系统: sudo apt-get install cockpit 其他Linux发行版的安装方法

[转帖]实用小技能:一键获取Harbor中镜像信息,快捷查询镜像

【摘要】一键获取Harbor中的镜像列表,无需登录harbor UI,也可批量下载镜像到本地并保存为tar包。本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接: https://github.com/weopenprojects/WeOpen-Star 前言 我们要查询Harbor中某个项

实用指南:手把手搭建坚若磐石的DevSecOps框架

长期以来,安全问题一直被当作软件开发流程中的最后一步。开发者贡献可以实现软件特性的代码,但只在开发生命周期的测试和部署阶段考虑安全问题。随着盗版、恶意软件及网络犯罪事件飙升,开发流程需要做出改变。 开发过程中的“安全左移”是指将安全问题作为每个开发迭代和冲刺的重要组成部分。诸多组织正在系统地将安全实

AI实用技巧 | 5分钟将coze集成到微信群机器人

在这篇文章中,我分享了如何将Coze平台成功集成到微信群聊机器人中的详细步骤。通过利用Coze的API功能,我们可以为微信群聊添加更多有趣和便利的功能,使得群聊体验更加丰富。

「Python实用秘技17」快速获取国内节假日安排

本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第17期,本系列立足于笔者日常工作中使用Python积累的心得体会,每一期为大家带来一个几分钟内就可学会的

[转帖]Linux实用技巧——find查找指定时间内修改过的文件或目录

https://cloud.tencent.com/developer/article/1694949 解决方案 例:查找出五分钟内修改过的文件 [root@mobius ~]$ find ./* -mmin -5 加上-mmin 参数即可, 其中后面的 -5 即表示五分钟内修改过的, 如果是+5

K8S 实用工具之一 - 如何合并多个 kubeconfig?

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群。 如果是第二种情况,是否有一个简单的 kubectl 命令来获取一个 kubeconfig 文件并将其合并到 ~/.kube/config

K8S 实用工具之二 - 终端 UI K9S

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先敲 --help,再敲命令,效率低 忘记加 -n 指定 namespace 太长的命令经常