主頁 > 後端開發 > 實用教程丨如何將實時資料顯示在前端電子表格中(一)

實用教程丨如何將實時資料顯示在前端電子表格中(一)

2023-05-19 14:22:28 後端開發

   

Author

Alex Zhang

Category

SpreadJS

Tags

SpreadJS,前端電子表格,實時資料,RealTime Data

 

 

 

前言

資料(包括股票、天氣和體育比分)在不斷更新為新資訊時最為有用,SpreadJS是一個非常通用的 JavaScript 電子表格組件,它還可以輕松地使用、顯示并通過資料系結提供實時資料更新,

我們將使用WebSocket從Finnhub.IO獲取實時資料,然后使用基本的 SpreadJS 功能來展示資料,要使用 Finnhub Stock API,您需要創建一個免費帳戶并生成您的 API 密鑰,我們稍后將在該應用程式中使用該密鑰,

在本教程中,我們將使用 Node.JS Express 和 WebSocket,因此請確保安裝最新版本,我們還將使用 Visual Studio Code,因此以管理員身份運行它,以便 NPM 命令可以在終端中運行,

JavaScript 實時資料示例

在此文中,我們將介紹如何按照以下步驟將實時資料合并到 JavaScript 電子表格中:

  1. 設定應用程式
  2. 連接到資料源
  3. 使用 SpreadJS 中的資料
  4. 為折線圖添加資料
  5. 添加折線圖
  6. 運行程式

應用設定

我們可以從為應用程式創建一個檔案夾開始,在這種情況下,我們將其命名為“實時資料”,接下來,需要在該檔案夾中創建一個 package.json 檔案,用作專案的清單檔案,這可能包含類似于以下的內容:

{

    "name": "real-time-data",

    "version": "0.0.2",

    "description": "An app that imports real-time data into Spread JS",

    "dependencies": {}

}

 

對于這個應用程式,我們將使用 Express 作為 Web 框架和 WebSockets 來獲取實時資料,我們可以簡單地使用 npm 安裝它,也將使用它來安裝 SpreadJS 檔案,在 Visual Studio Code 終端中,您可以鍵入:

npm install --save [email protected] finnhub websocket @grapecity/spread-sheets @grapecity/spread-sheets-charts

一旦安裝成功,就可以創建一個名為“index.js”的檔案來設定應用程式,其中會包含以下內容:

var express = require('express');

var app = express();

var http = require('http').Server(app);

app.use('/node_modules', express.static('node_modules'));

// Add code here

http.listen(3000, function(){

    console.log('Stock Ticker Started, connect to localhost:3000');

});

  

現在就可以添加應用程式到 HTML 檔案中,在這種情況下,我們可以將檔案命名為“index.html”,然后繼續向HTML 檔案添加一些代碼,包括對 SpreadJS 腳本和 CSS 參考以及一些基本的初始化代碼:

<!doctype html>

<html>

  <head>

    <title>Real Time Data</title>

  </head>

  <script type="text/javascript" src="https://www.cnblogs.com/powertoolsteam/archive/2023/05/19/stockTemplate.js"></script>

  <link href="https://www.cnblogs.com/node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css" rel="stylesheet" type="text/css" />

  <script src="https://www.cnblogs.com/node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js"></script>

  <script src="https://www.cnblogs.com/node_modules/@grapecity/spread-sheets-charts/dist/gc.spread.sheets.charts.min.js" ></script>

  <script>

    window.onload = function() {

      // Initialize spread variables

      var spread = new GC.Spread.Sheets.Workbook(document.getElementById("spreadSheet"), { sheetCount: 1 });

      spread.fromJSON(stockTemplate);

      spread.options.scrollbarMaxAlign = true;

      spread.options.showHorizontalScrollbar = false;

      spread.options.showVerticalScrollbar = false;

      spread.options.grayAreaBackColor = 'rgb(38,38,38)';

      var activeSheet = spread.getActiveSheet();

      var dataSheet = spread.getSheet(1);

      activeSheet.clearSelection();

    }

  </script>

  <body>

    <div id="spreadSheet" style="width: 680px; height: 590px; border: 1px solid gray"></div>

  </body>

</html>

  

在前面的代碼片段中,我們使用了 spread.fromJSON() 來加載模板檔案,在下面的例子中,我們以股票資料顯示為背景建立相應的模板檔案,通過

使用 SpreadJS Designer,我們可以為資料源創建資料標簽和系結、格式化單元格、洗掉網格線和標題,并為圖表添加一個區域,同時,

提供名為“stockTemplate.js”的模板檔案,

想要從設計器中匯出到 JS,可以單擊“檔案”>“匯出”并選擇“匯出 JavaScript 檔案”,在本教程中,我們將該模板檔案(stockTemplate.js)與 index.js 和 index.html 檔案放在同一檔案夾中,

回到 index.js 檔案,我們需要使用以下代碼告訴程式來提供 HTML 檔案和模板:

app.get('/', function(req, res){

    res.sendFile(__dirname + '/index.html');

});

// Required to load template file

app.get('/stockTemplate.js', function(req, res){

    res.sendFile(__dirname + '/stockTemplate.js');

});

  

同時,在 index.html 檔案中,可以通過添加腳本來加載該模板檔案:

<script type="text/javascript" src="https://www.cnblogs.com/powertoolsteam/archive/2023/05/19/stockTemplate.js"></script>

  

要完成設定,還需要初始化稍后會用到的變數,并創建一個下拉單元格來選擇股票資料:

// Initialize variables

var stockSymbolLookup = [{text:'Apple Inc.', value:'AAPL'}, {text:'Microsoft Inc.', value:'MSFT'}, {text:'Google', value:'GOOGL'}];

var dataSource = [],

    lastPrice = 0,

    timeStamp = 0,

    volume = 0,

    stockCounter = 0,

    chart = null,

    chartAxisRange = 0.5,

    lineDataMaxSize = 10,

    lineData = https://www.cnblogs.com/powertoolsteam/archive/2023/05/19/new Array(lineDataMaxSize),

    initialData = true,

    socket,

    stock;

// Create a drop down for selecting a stock

var stockDropDown = new GC.Spread.Sheets.CellTypes.ComboBox().items(stockSymbolLookup);

activeSheet.getCell(2,1).cellType(stockDropDown);

  

我們還可以為開盤價的變化設定特定的條件格式,

  • 綠色 = 正
  • 紅色 = 負

創建 SpreadJS Blazor 組件

在將 SpreadJS 放入 Blazor 應用程式之前,我們必須首先創建一個 Blazor 組件來包含 SpreadJS,

在本教程中,我們將使用 Visual Studio 2022 和 SpreadJS V16.0,

想要創建組件,首先要創建一個 Razor 類別庫:

剃刀類別庫

為簡單起見,您可以將其命名為“SpreadJS_Blazor_Lib”:

配置專案

創建專案后,我們需要將 SpreadJS 檔案復制到“wwwroot”檔案夾,

連接到資料源

在實際撰寫代碼連接到資料源之前,我們需要添加一些代碼來處理用戶從 Spread 的下拉串列中選擇股票的情況,只有這樣我們才能連接并獲取資料,為此,我們可以系結到 EditEnded 事件,通過陣列查找股票代碼,然后連接到該股票資料:

// Bind an event for changing the stock in the drop down menu

// Set the stock variable to the newly selected stock from the list

activeSheet.bind(GC.Spread.Sheets.Events.EditEnded, function(e, info) {

    if(info.row === 2 && info.col === 1) {

      stock = stockSymbolLookup.find(stockLookup => stockLookup.text === activeSheet.getValue(2,1));

      connectToDataSource();

    }

  });

  

這將呼叫一個我們創建的名為“connectToDataSource”的新函式:

// Handle connecting to the data source to get new stock information when the selected stock is changed

function connectToDataSource() {

    // Create a new WebSocket connected to the FinnHub Stock API with a personal token

    socket = new WebSocket('wss://ws.finnhub.io?token=<YOUR TOKEN HERE>');

    if (socket.readyState !== WebSocket.CLOSED)

      console.log("CONNECTED.");

    else

      console.log("NOT CONNECTED.");

     

    // When the socket first opens, set the length of the data source to zero, remove the line chart if

    // it exists, and send a message back to the server with the selected stock

    socket.addEventListener('open', function (event) {

      dataSource.length = 0;

      if (activeSheet.charts.get('line') != null)

        activeSheet.charts.remove('line');

      socket.send(JSON.stringify({'type':'subscribe', 'symbol':stock.value}));

    });

  }

  

此代碼使用 WebSocket 連接到資料源,并傳入要訂閱的股票代碼,

注意:初始化 WebSocket 時,您需要添加從 Finnhub.IO 生成的令牌,

此外,為保證資料在重置的程序中能夠得到正確的結果,我們需要增加activeSheet.charts.remove('line');,每次更改股票選擇時都會呼叫此函式,

當程式連接到資料源并訂閱特定股票值時,程式將從該資料源接收 JSON 資料形式的更新,我們需要決議這些資料并在 Spread 中進行使用,為此,我們可以使用事件偵聽器來偵聽來自 WebSocket 的訊息

// Listen for a message from the server

socket.addEventListener('message', function (event) {

    spread.suspendPaint();

    // Get the data from the server message

    var dataArray = JSON.parse(event.data)

    console.log(dataArray);

    if (dataArray.data && dataArray.data.length != 0) {

      // Set the data source and extract values from it

      var dataSource = dataArray.data[dataArray.data.length-1];

      lastPrice = dataSource.p;

      timeStamp = dataSource.t;

      volume = dataSource.v;

      // Fill in starting data for the line chart

      if (initialData) {

        lineData.fill({Value:lastPrice});

        setConditionalFormatting();

        initialData = https://www.cnblogs.com/powertoolsteam/archive/2023/05/19/false;

      }

      // Set the specific values in the spreadsheet

      activeSheet.setValue(4, 1, stock.value);

      activeSheet.setValue(5, 1, lastPrice);

      activeSheet.setValue(2, 7, lastPrice);

      activeSheet.setValue(4, 7, new Date(timeStamp));

      activeSheet.setValue(6, 7, volume);

      // Add the line chart if one doesn't exist

      if (activeSheet.charts.all().length == 0) {

        addChart();

      }

      addLineData(lastPrice);

      bindData();

    }

   

    spread.resumePaint();

  });

  

在上面的代碼中,我們遍歷資料源并在作業表中填寫一些示例資料,同時,還呼叫了一些將被定義的函式:bindDataaddLineDataaddChartsetConditionalFormatting

當資料被正確獲取之后,如何在SpreadJS中進行顯示,可以前往如何將實時資料顯示在前端電子表格中(二)中一探究竟,

歡迎訪問SpreadJS產品官網:https://www.grapecity.com.cn/developer/spreadjs



本文是由葡萄城技術開發團隊發布,轉載請注明出處:葡萄城官網


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/552913.html

標籤:其他

上一篇:希望所有計算機專業同學都知道這些老師

下一篇:返回列表

標籤雲
其他(159345) Python(38156) JavaScript(25439) Java(18078) C(15229) 區塊鏈(8267) C#(7972) AI(7469) 爪哇(7425) MySQL(7201) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5340) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4573) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1975) 功能(1967) Web開發(1951) HtmlCss(1940) python-3.x(1918) C++(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 實用教程丨如何將實時資料顯示在前端電子表格中(一)

    Author Alex Zhang Category SpreadJS Tags SpreadJS,前端電子表格,實時資料,RealTime Data 前言 資料(包括股票、天氣和體育比分)在不斷更新為新資訊時最為有用。SpreadJS是一個非常通用的 JavaScript 電子表格組件,它還可以輕 ......

    uj5u.com 2023-05-19 14:22:28 more
  • 希望所有計算機專業同學都知道這些老師

    C語言教程——翁凱老師、赫斌 翁愷老師是土生土長的浙大碼農,從本科到博士都畢業于浙大計算機系,后來留校教書,一教就是20多年。 翁愷老師的c語言課程非常好,講解特別有趣,很適合初學者學習。 郝斌老師的思路是以初學者的思路來思考的,非常適合小白,你不理解的問題,基本上他都會詳細說一下。 C++——侯捷 ......

    uj5u.com 2023-05-19 14:20:14 more
  • 36基于java的醫院管理系統設計與實作

    基于java的醫院管理系統設計與實作,門診和住院管理系統,醫院住院管理系統,醫院門診系統,門診管理系統,醫院住院系統,藥房管理系統,藥品,掛號管理系統。 ......

    uj5u.com 2023-05-19 14:18:59 more
  • 深入Spring配置項問題,全面決議

    本文就Spring配置項決議問題展開分析,這其中涉及到bean定義注冊表后置處理、bean工廠后置處理、工廠bean等Spring相關的概念。本文將以上述問題作為切入點,進行分析和展開介紹。 ......

    uj5u.com 2023-05-19 14:18:25 more
  • 例外體系與專案實踐

    程式中的例外可以反映系統的缺陷和待優化的點,并且是無法完全避免的,如何處理例外和降低例外出現的頻率,是系統質量的基礎保障;隨著分布式架構的流行,各種復雜的請求鏈路給例外處理帶來了巨大的麻煩; ......

    uj5u.com 2023-05-19 14:05:28 more
  • 從零玩轉Nginx

    01【熟悉】實際開發中的問題? 現在我們一個專案跑在一個tomcat里面 當一個tomcat無法支持高的并發量時。可以使用多個tomcat 那么這多個tomcat如何云分配請求 |-nginx 02【熟悉】服務器概述 1,目前常見的web服務器 1,Apache(http://httpd.apach ......

    uj5u.com 2023-05-19 13:41:51 more
  • Windows10安裝Jmeter(圖文教程)

    Apache JMeter是Apache組織開發的基于Java的壓力測驗工具。用于對軟體做壓力測驗,它最初被設計用于Web應用測驗,但后來擴展到其他測驗領域。 它可以用于測驗靜態和動態資源,例如靜態檔案、Java 小服務程式、CGI 腳本、Java 物件、資料庫、FTP 服務器, 等等。JMeter ......

    uj5u.com 2023-05-19 13:40:47 more
  • 37基于java的職工管理系統設計與實作

    基于java的職工管理系統設計與實作,員工管理系統,企業員工管理系統,公司員工管理系統,企業人事管理系統,基于java職工管理系統,前后端分離,員工考勤管理系統,職工獎懲管理系統,職員合同管理,HR管理系統,人事HR管理系統。 ......

    uj5u.com 2023-05-19 13:40:43 more
  • 實用教程丨如何將實時資料顯示在前端電子表格中(一)

    Author Alex Zhang Category SpreadJS Tags SpreadJS,前端電子表格,實時資料,RealTime Data 前言 資料(包括股票、天氣和體育比分)在不斷更新為新資訊時最為有用。SpreadJS是一個非常通用的 JavaScript 電子表格組件,它還可以輕 ......

    uj5u.com 2023-05-19 13:40:33 more
  • 希望所有計算機專業同學都知道這些老師

    C語言教程——翁凱老師、赫斌 翁愷老師是土生土長的浙大碼農,從本科到博士都畢業于浙大計算機系,后來留校教書,一教就是20多年。 翁愷老師的c語言課程非常好,講解特別有趣,很適合初學者學習。 郝斌老師的思路是以初學者的思路來思考的,非常適合小白,你不理解的問題,基本上他都會詳細說一下。 C++——侯捷 ......

    uj5u.com 2023-05-19 13:39:42 more