萬盛學電腦網

 萬盛學電腦網 >> Excel教程 >> excel綜合 >> excel RTD函數實際例子及語法

excel RTD函數實際例子及語法

  一、RTD函數語法

  RTD(ProgID,server,topic1,[topic2],...)

  函數功能:全部顯示全部隱藏從支持 COM 自動化 (COM 加載項:通過添加自定義命令和指定的功能來擴展 Microsoft Office 程序的功能的補充程序。COM 加載項可在一個或多個 Office 程序中運行。COM 加載項使用文件擴展名 .dll 或 .exe。)的程序中檢索實時數據。

  參數說明

  ProgID 已安裝在本地計算機上、經過注冊的 COM 自動化加載宏 (加載項:為 Microsoft Office 提供自定義命令或自定義功能的補充程序。)的 ProgID 名稱,該名稱用引號引起來。

  server 運行加載宏的服務器的名稱。如果沒有服務器,程序是在本地計算機上運行,那麼該參數為空白。否則,用引號 ("") 將服務器的名稱引起來。如果在 Visual Basic for Applications (VBA) (Visual Basic for Applications (VBA):Microsoft Visual Basic 的宏語言版本,用於編寫基於 Microsoft Windows 的應用程序,內置於多個 Microsoft 程序中。) 中使用 RTD,則必須用雙重引號將服務器名稱引起來,或對其賦予 VBA NullString 屬性,即使該服務器在本地計算機上運行。

  topic1, topic2,... 為 1 到 253 個參數,這些參數放在一起代表一個唯一的實時數據。

  必須在本地計算機上創建並注冊 RTD COM 自動化加載宏。如果未安裝實時數據服務器,則在試圖使用 RTD 函數時將在單元格中出現一則錯誤消息。如果服務器繼續更新結果,那麼與其他函數不同,RTD 公式將在 Microsoft Excel 處於自動計算模式下進行更改。

  二、RTD函數實際例子

  =parseArrayData(RTD("ExcelRTD.RTDFunctions",,"AAA"))

  =RTD("MyComAddIn.Progid",,"LOREM_IPSUM","Price")

  在Excel 中使用RTD非常簡單,Excel 提供了一個新的工作表函數 RTD,此函數允許通過調用組件對象模型 (COM) 自動化服務器來實現實時數據檢索。RTD 工作表函數使用以下語法:

  "=RTD(ProgID, Server, String 1, String 2, ... String n)"

  第一個變量 ProgID 表示Real-Time Data 服務器(RTD Server)的編程標識符 (ProgID)。Server 變量指示運行RTD Server的計算機的名稱;如果RTD Server在本地運行,則可以將此變量設置為空字符串或將其忽略。其他變量只表示發送到RTD Server的參數;這些參數的每個唯一組合都表示一個“主題”(topic),每個“主題”有一個關聯的“主題 ID”(topic id)。這些參數區分大小寫。例如,以下內容演示將生成三個不同主題ID的RTD Server調用:

  =RTD("ExcelRTD.RTDFunctions",,"AAA", "10")

  =RTD("ExcelRTD.RTDFunctions",,"AAA", "5")

  =RTD("ExcelRTD.RTDFunctions",,"aaa", "5")

  要使用 Excel 的 RTD 函數,必須注冊一個實現 IRTDServer 接口的COM組件。實現這個接口的COM組件就是所謂的RTD Server。IRTDServer具有以下成員:

  ServerStart(CallbackObject)

  CallbackObject 是一個IRTDUpdateEvent類型的參數,它有一個UpdateNotify方法,用於通知Excel有更新的數據可用(push)。這樣Excel就會通過調用RefreshData方法來刷新所有的主題(pull)。當 Excel 請求RTD Server的第一個 RTD 主題時調用ServerStart方法,該方法會在成功時返回 1,並在失敗時返回負值或 0。這個方法在隨後應用其他RTD函數時不會再次被調用。

  ConnectData(TopicID, Strings, GetNewValues)

  其中,TopcID 唯一標識這個函數在Excel中的一個應用,即使復制多份到不同的單元格,對於Excel來講,也只是對應一個主題。這個 topicID 由Excel返回,我們需要將其記錄下來,以便為其提供更新的數據。Strings 是一個System.Array,用於接收RTD函數傳入的參數(String 1...String n),這是一個引用類型的參數。GetNewValues 用於確定是否總是獲取最新數據,如果這個參數傳入true,則每次保存Excel文檔以後,再次重新打開時,看到的不一定是上次保存時的數據,而是最新的實時數據,這也是一個引用類型的參數。

  每當一個新的主題(Topic)被應用到Excel,ConnectData都會被調用。在這裡,需要保存傳入的新的TopicID和查詢參數以供之後更新數據使用。為此,需要定義好自己的數據結構。

  DisconnectData(TopicID)

  與ConnectData一樣,TopcID 唯一標識這個函數在Excel中的一個應用。當我們從Excel中移除一個主題(刪除所有采用相同參數的RTD函數)之後,DisconnectData將被調用,在這裡,可以釋放對這個主題的監控,並不再為其獲取新數據。

  Heartbeat

  確定RTD Server是不是依然可用,0和負數代表不可用,1代表可用。Excel會調用此方法確定服務是否斷連。

  RefreshData(TopicCount)

  TopicCount表示要更新的主題數量,這是一個引用類型的參數,用於返回給Excel。我們可以定義一個時鐘,用於定時向數據源獲取數據,這樣,在時鐘的Elapsed事件中,獲取最新數據,並調用xlRTDUpdate成員的UpdateNotify方法以通知Excel,新的數據准備完畢。這樣Excel就會調用RefreshData方法,來對工作簿中的數據進行更新。

  ServerTerminate

  當Excel不再需要從RTD Server獲取實時數據時被調用。在這裡,可以執行一些清理,例如清除緩存,關閉時鐘等等。至此,一個RTD Server的生命周期就結束了。

copyright © 萬盛學電腦網 all rights reserved