Ako vytvoriť RealTimeData servera pre program Excel

Preklady článku Preklady článku
ID článku: 285339 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

SUHRN

Program Microsoft Excel poskytuje novú funkciu pracovného hárka, VTR, to vám umožňuje volať Component Object Model (COM) automatizačný server pre účel získavanie údajov v reálnom čase. Tento článok popisuje použitie Jazyka Visual Basic vytvárať RealTimeData Server na používanie s funkciu RTD programu Excel.

DALSIE INFORMACIE

Funkcia pracovného hárka VTR má nasledovnú syntax:
= () VTRProgID, Server, reťazec1,[Reťazec2]...)
Prvý argument ProgID, predstavuje programovým identifikátorom (ProgID) z RealTimeData server. V Server argument označuje názov počítača, na ktorom RealTimeData server je spustený; Tento argument môže byť reťazec hodnotu null alebo vynechané, ak RealTimeData server je na lokálne spúšťanie. Zostávajúce argumenty jednoducho predstavujú parametre odosielať na RealTimeData server; každý unikátny kombinácia týchto parametrov predstavuje jednu "tému," ktoré má priradené "id témy." Parametre sú malé a veľké písmená. Napríklad, nasledovné ilustruje volania na server VTR, ktorý by mal za následok tri samostatné tému ID:
= RTD("ExcelRTD.RTDFunctions",,"AAA", "10")

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

= RTD("ExcelRTD.RTDFunctions",,"aaa", "5")
Aby COM automatizačný Server sa RealTimeData Server na použitie s funkciou RTD programu Excel, musí implementovať IRTDServer rozhranie. Server musí realizovať všetky metódy IRTDServer:

ServerStart
Nazýva keď Excel požaduje prvej VTR témy pre server. ServerStart by návratnosť 1 na úspech, a zápornú hodnotu alebo 0 zlyhanie. Prvý parameter ServerStart metóda je objekt spätného volania, ktorý RealTimeData server používa na upozorní Excel by mal zhromažďovať aktualizácie z RealTimeData Server.
ServerTerminate
Názvom keď Excel už vyžaduje VTR témy z RealTimeData servera.
ConnectData
Nazýva kedykoľvek Excel požiada o novú tému RTD zo servera RealTimeData.
DisconnectData
Nazýva kedykoľvek Excel už vyžaduje konkrétnu tému.
Srdcový tep
Nazýva programom Excel, ak daný interval uplynul od poslednej dobe Excel bol upozornenia na aktualizácie zo servera RealTimeData.
RefreshData
Názvom keď Excel požaduje obnoviť na témy. RefreshData sa nazýva po server upozorní programu Excel, ktoré aktualizácie existujú, a Vráti počet tém aktualizovať spolu s id témy a hodnoty pre každú tému.

Vytvoriť vzorky RealTimeData Server

Tieto vzorky demonštruje, ako vytvoriť a používať RealTimeData server s Microsoft Excel 2002. Jednoducho poskytuje tento server počítadlo, ktoré sa aktualizuje každých 10 sekúnd na pracovnom hárku. Server akceptuje až dve témy reťazcov. Prvý reťazec témy môžu byť AAA, BBB a CCC; akékoľvek iné reťazec témy sa považuje za neplatnú a server vráti chybovú hodnotu # hodnota! na Funkciu RTD. Druhým reťazcom je číselná hodnota, ktorá predstavuje ako Vráti hodnotu by zvýši. Ak druhý reťazec je vynechaný, prírastok hodnoty predvolené hodnoty 1. Ak druhý reťazec nie sú numerické, server vráti chybovú hodnotu # číslo! funkciu RTD.
  1. Začať nový projekt ActiveX DLL v jazyku Visual Basic.
  2. Na Project ponuky, kliknite na tlačidlo Odkazy, vyberte Objektová knižnica pre vašu verziu programu Excel, a potom kliknite na tlačidlo ok. Napríklad, vyberte jeden z nasledujúcich krokov:
    • Programu Microsoft Office Excel 2007, vyberte Objektová knižnica programu Microsoft Excel 12.0.
    • Programu Microsoft Office Excel 2003, vyberte Objektová knižnica programu Microsoft Excel 11.0.
    • Programu Microsoft Excel 2002, vyberte Objektová knižnica programu Microsoft Excel 10.0.
  3. Na Project ponuky, kliknite na tlačidlo Project1 vlastnosti. Zmena Názov projektu na ExcelRTD, a potom kliknite na tlačidlo ok.
  4. Zmena programu Vlastnosť modul triedy Class1 na RTDFunctions. Pridať nasledujúci kód do RTDFunctions:
    Option Explicit
    
    Implements IRtdServer  'Interface allows Excel to contact this RealTimeData server
    
    Private m_colTopics As Collection
        
    Private Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, GetNewValues As Boolean) As Variant
        '** ConnectData is called whenever a new RTD topic is requested
        
        'Create a new topic class with the given TopicId and string and add it to the
        'm_colTopics collection
        Dim oTopic As New Topic
        m_colTopics.Add oTopic, CStr(TopicID)
        oTopic.TopicID = TopicID
        oTopic.TopicString = Strings(0)
        If UBound(Strings) >= 1 Then oTopic.SetIncrement Strings(1)
        
        'For this example, the initial value for a new topic is always 0
        IRtdServer_ConnectData = oTopic.TopicValue
        
        Debug.Print "ConnectData", TopicID
    End Function
    
    Private Sub IRtdServer_DisconnectData(ByVal TopicID As Long)
       '** DisconnectData is called whenever a specific topic is not longer needed
       
       'Remove the topic from the collection
       m_colTopics.Remove CStr(TopicID)
       
       Debug.Print "DisconnectData", TopicID
    End Sub
    
    Private Function IRtdServer_Heartbeat() As Long
        '** Called by Excel if the heartbeat interval has elapsed since the last time
        '   Excel was called with UpdateNotify.
        Debug.Print "HeartBeat"
    End Function
    
    Private Function IRtdServer_RefreshData(TopicCount As Long) As Variant()
        '** Called when Excel is requesting a refresh on topics. RefreshData will be called
        '   after an UpdateNotify has been issued by the server. This event should:
        '   - supply a value for TopicCount (number of topics to update)
        '   - return a two dimensional variant array containing the topic ids and the
        '     new values of each.
       
        Dim oTopic As Topic, n As Integer
        ReDim aUpdates(0 To 1, 0 To m_colTopics.Count - 1) As Variant
        For Each oTopic In m_colTopics
            oTopic.Update
            aUpdates(0, n) = oTopic.TopicID
            aUpdates(1, n) = oTopic.TopicValue
            n = n + 1
        Next
        TopicCount = m_colTopics.Count
        IRtdServer_RefreshData = aUpdates
       
       Debug.Print "RefreshData", TopicCount & " topics updated"
    End Function
    
    Private Function IRtdServer_ServerStart(ByVal CallbackObject As Excel.IRTDUpdateEvent) As Long
        '** ServerStart is called when the first RTD topic is requested
        
        Set oCallBack = CallbackObject
        Set m_colTopics = New Collection
        g_TimerID = SetTimer(0, 0, TIMER_INTERVAL, AddressOf TimerCallback)
        If g_TimerID > 0 Then IRtdServer_ServerStart = 1       'Any value <1 indicates failure.
        
        Debug.Print "ServerStart"
    End Function
    
    Private Sub IRtdServer_ServerTerminate()
        '** ServerTerminate is called when no more topics are needed by Excel.
        
        KillTimer 0, g_TimerID
    
        '** Cleanup any remaining topics. This is done here since 
        '   IRtdServer_DisconnectData is only called if a topic is disconnected 
        '   while the book is open. Items left in the collection when we terminate
        '   are those topics left running when the workbook was closed.
    
        Dim oTopic As Topic
        For Each oTopic In m_colTopics
            m_colTopics.Remove CStr(oTopic.TopicID)
            Set oTopic = Nothing
        Next
    
        Debug.Print "ServerTerminate"
      
    End Sub
    
    					
  5. Na Project ponuky, kliknite na tlačidlo Pridať modul triedy. Zmena modul triedy programu Vlastnosť Téma a zmeniť Instancing Vlastnosť Súkromné. Pridať nasledujúci kód do Téma Modul triedy:
    Option Explicit
    
    Private m_TopicID As Long
    Private m_TopicString As String
    Private m_Value As Variant
    Private m_IncrementVal As Long
    
    Private Sub Class_Initialize()
        m_Value = 0
        m_IncrementVal = 1
    End Sub
    
    Friend Property Let TopicID(ID As Long)
        m_TopicID = ID
    End Property
    
    Friend Property Get TopicID() As Long
        TopicID = m_TopicID
    End Property
    
    Friend Property Let TopicString(s As String)
        s = UCase(s)
        If s = "AAA" Or s = "BBB" Or s = "CCC" Then
            m_TopicString = s
        Else
            m_Value = CVErr(xlErrValue) 'Return #VALUE if not one of the listed topics
        End If
    End Property
    
    Friend Sub Update()
        On Error Resume Next 'the next operation will fail if m_Value is an error (like #NUM or #VALUE)
        m_Value = m_Value + m_IncrementVal
    End Sub
    
    Friend Sub SetIncrement(v As Variant)
        On Error Resume Next
        m_IncrementVal = CLng(v)
        If Err <> 0 Then
            m_Value = CVErr(xlErrNum) 'Return #NUM if Increment value is not numeric
        End If
    End Sub
    
    Friend Property Get TopicValue() As Variant
        If Not (IsError(m_Value)) Then
            TopicValue = m_TopicString & ": " & m_Value
        Else
            TopicValue = m_Value
        End If
    End Property
    					
  6. Na Project menu vyberte Pridajte modul. Do nového modulu, pridajte nasledujúci kód:
    Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, _
    ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    
    Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
    
    Public Const TIMER_INTERVAL = 5000
    Public oCallBack As Excel.IRTDUpdateEvent
    Public g_TimerID As Long
    
    Public Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
        oCallBack.UpdateNotify
    End Sub
    					
  7. Na Súbor ponuky, kliknite na tlačidlo Skontrolujte, ExcelRTD.dll tvoriacej zložku.

V programe Excel používa Server VTR

  1. Začať nový zošit v programe Microsoft Excel.
  2. Do bunky A1 zadajte nasledujúci vzorec a potom stlačte kláves Zadajte kľúč:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Počiatočné vrátená hodnota je "AAA: 0". Po piatich sekundách hodnota aktualizácie "AAA: 10" a po 10 sekundách, hodnota aktualizácie „AAA:15, ” a tak ďalej.

  3. Do bunky A2 zadajte nasledujúci vzorec a stlačte ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"BBB", 3)
    Počiatočné vrátená hodnota je "BBB: 0". Každých päť sekúnd bunky hodnota krokoch 3.

  4. Do Buky A3 zadajte nasledujúci vzorec a stlačte ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Počiatočné vrátená hodnota zodpovedá obsah bunky A1, pretože je to rovnaké "tému", ktoré sa používa v A1.

  5. Do bunky A4 zadajte nasledujúci vzorec a stlačte Enter:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 10)
    Počiatočné vrátená hodnota je "AAA: 0." každých päť sekúnd bunky prírastky hodnoty ako robiť iné bunky. Všimnite si, že nie je vrátená hodnota zápas obsah bunky A1 alebo A3, pretože kombinácie parametrov postúpené server je odlišná.
Na tomto obrázku VTR server bola zostavená a Excel bol pomocou run-time verziu súčiastky. Pre ú?ely, VTR ladenia servery možno spustiť z Visual Basic IDE.

Spustenie v debug režime:
  1. Skončite program Microsoft Excel a prepnúť na projekt v jazyku Visual Základné.
  2. Stlačením klávesu F5 začať komponentu. Ak Vlastnosti projektu zobrazí sa dialógové okno, kliknite na tlačidlo ok vyberte možnosť predvolené Čakať na súčasti sa vytvorí.
  3. Skontrolujte, či je okna Immediate Visual Basic zobrazí. Pri zadávaní vzorcov do buniek a bunky sú aktualizované, preskúmať obsah okna Immediate Visual Basic vidieť, ktoré akcie sa spúšťa rôznych udalostiach.
Poznámky týkajúce sa DisconnectData udalosť

Program Excel síce účastníka VTR server, to Spúšťače DisconnectData udalosť, keď to už potrebuje tému (napríklad, keď ste Odstráňte alebo vymažte VTR vzorec v bunke). Avšak, Excel nevyžaduje DisconnectData na každú tému pre VTR server zatvorenom zošite alebo Program Excel ukončí; namiesto toho program Excel iba volania ServerTerminate. Ak vytvárate server VTR, by kód pre akúkoľvek potrebné čisté-až o témach alebo iných objektov pri ServerTerminate udalosť požiare.

(c) Microsoft Corporation 2001, všetky práva Vyhradené. Príspevky Lori B. Turner, Microsoft Corporation.

ODKAZY

Ďalšie informácie získate po kliknutí na nasledujúce číslo článku databázy Microsoft Knowledge Base:
284883VTR Server neposiela aktualizácia oznámenia na viaceré inštancie programu Excel

Vlastnosti

ID článku: 285339 - Posledná kontrola: 24. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Kľúčové slová: 
kbexpertisebeginner kbautomation kbhowto kbmt KB285339 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:285339

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com