Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để tạo một máy chủ RealTimeData cho Excel

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

285339
TÓM TẮT
Microsoft Excel cung cấp một chức năng bảng tính mới, RTD, cho phép bạn gọi một máy chủ tự động hóa mô hình đối tượng thành phần (COM) cho mục đích của lấy dữ liệu thời gian thực. Bài viết này mô tả cách sử dụng Visual Basic để tạo ra một máy chủ RealTimeData để sử dụng với Excel RTD chức năng.
THÔNG TIN THÊM
Chức năng bảng tính RTD có cú pháp sau:
= RTD)ProgID, máy chủ, String1,[String2]...)
Đối số đầu tiên, ProgID, đại diện cho chương trình Identifier (ProgID) của các RealTimeData máy chủ. Các Máy chủ đối số cho biết tên của máy tính mà trên đó các Hệ phục vụ RealTimeData được điều hành; đối số này có thể là một chuỗi vô hoặc bỏ qua nếu các máy chủ RealTimeData là để chạy cục bộ. Các đối số còn lại chỉ đơn giản đại diện cho các tham số để gửi tới hệ phục vụ RealTimeData; mỗi độc đáo sự kết hợp của các tham số đại diện cho một trong những "chủ đề," có một liên kết "chủ đề id." Tham số là chữ. Ví dụ, sau đây minh họa các cuộc gọi đến các máy chủ RTD sẽ cho kết quả trong ba chủ đề riêng biệt ID:
= RTD("ExcelRTD.RTDFunctions",,"AAA", "10")

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

= RTD("ExcelRTD.RTDFunctions",,"aaa", "5")
Để cho một máy chủ tự động hóa COM là một máy chủ RealTimeData để sử dụng với Excel RTD hàm, nó phải thực hiện các IRTDServer giao diện. Hệ phục vụ phải thực hiện tất cả các phương pháp IRTDServer:

ServerStart
Được gọi là khi Excel yêu cầu chủ đề RTD đầu tiên cho máy chủ. ServerStart nên trở về một 1 ngày thành công, và một giá trị tiêu cực hoặc 0 ngày sự thất bại. Tham số đầu tiên của các ServerStart phương pháp là một đối tượng gọi lại máy chủ RealTimeData sử dụng để thông báo cho Excel khi nó nên thu thập thông tin Cập Nhật từ RealTimeData hệ phục vụ.
ServerTerminate
Được gọi là khi Excel không còn đòi hỏi các chủ đề RTD từ hệ phục vụ RealTimeData.
ConnectData
Gọi là bất cứ khi nào Excel yêu cầu chủ đề RTD mới từ hệ phục vụ RealTimeData.
DisconnectData
Gọi là bất cứ khi nào Excel không còn yêu cầu một chủ đề cụ thể.
Nhịp tim
Gọi là của Excel nếu một khoảng thời gian nhất định đã trôi qua kể từ lần cuối cùng Excel được thông báo về bản Cập Nhật từ hệ phục vụ RealTimeData.
RefreshData
Được gọi là khi Excel yêu cầu làm mới một về các chủ đề. RefreshData được gọi là sau khi hệ phục vụ thông báo cho Excel có bản Cập Nhật tồn tại, và nó có trả lại một số các chủ đề để cập nhật cùng với chủ đề id và giá trị cho mỗi chủ đề.

Tạo ra một mẫu RealTimeData Server

Mẫu sau đây chứng tỏ làm thế nào để tạo và sử dụng một RealTimeData máy chủ với Microsoft Excel 2002. Hệ phục vụ này chỉ đơn giản là cung cấp một Số lượt truy cập được cập nhật mỗi 10 giây trên một bảng tính. Hệ phục vụ chấp nhận lên để hai chủ đề dây. Chuỗi chủ đề đầu tiên có thể là AAA, BBB và CCC; bất kỳ chủ đề chuỗi được coi là không hợp lệ và máy chủ trả về #VALUE! để các RTD chức năng. Chuỗi thứ hai là một giá trị số đại diện cho cách các trở về giá trị nên được incremented. Nếu chuỗi thứ hai bỏ qua, các tăng giá trị mặc định là 1. Nếu chuỗi thứ hai không phải là số, máy chủ trả về #NUM! chức năng RTD.
  1. Bắt đầu một dự án mới ActiveX DLL trong Visual Basic.
  2. Trên các Dự án trình đơn, nhấp vào Tham khảo, chọn thư viện đối tượng của bạn Phiên bản của Excel và bấm Ok. Ví dụ, chọn một trong các cách sau:
    • Đối với Microsoft Office Excel 2007, chọn Microsoft Excel 12,0 đối tượng thư viện.
    • Đối với Microsoft Office Excel 2003, chọn Microsoft Excel 11,0 đối tượng thư viện.
    • Đối với Microsoft Excel 2002, chọn Microsoft Excel 10,0 đối tượng thư viện.
  3. Trên các Dự án trình đơn, nhấp vào Thuộc tính Project1. Thay đổi các Tên dự án để ExcelRTD, và sau đó nhấp vào Ok.
  4. Thay đổi các Tên bất động sản của lớp module Class1 để RTDFunctions. Thêm mã sau đây để RTDFunctions:
    Option ExplicitImplements IRtdServer  'Interface allows Excel to contact this RealTimeData serverPrivate 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", TopicIDEnd FunctionPrivate 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", TopicIDEnd SubPrivate 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 FunctionPrivate 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 FunctionPrivate 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 FunctionPrivate 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. Trên các Dự án trình đơn, nhấp vào Thêm lớp Module. Thay đổi lớp module Tên bất động sản để Chủ đề và thay đổi các Instancing bất động sản để Tư nhân. Thêm mã sau đây để các Chủ đề lớp module:
    Option ExplicitPrivate m_TopicID As LongPrivate m_TopicString As StringPrivate m_Value As VariantPrivate m_IncrementVal As LongPrivate Sub Class_Initialize()    m_Value = 0    m_IncrementVal = 1End SubFriend Property Let TopicID(ID As Long)    m_TopicID = IDEnd PropertyFriend Property Get TopicID() As Long    TopicID = m_TopicIDEnd PropertyFriend 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 IfEnd PropertyFriend 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_IncrementValEnd SubFriend 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 IfEnd SubFriend Property Get TopicValue() As Variant    If Not (IsError(m_Value)) Then        TopicValue = m_TopicString & ": " & m_Value    Else        TopicValue = m_Value    End IfEnd Property					
  6. Trên các Dự án trình đơn, chọn Thêm mô-đun. Thêm mã sau vào các mô-đun mới:
    Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, _ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongPublic Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As LongPublic Const TIMER_INTERVAL = 5000Public oCallBack As Excel.IRTDUpdateEventPublic g_TimerID As LongPublic Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)    oCallBack.UpdateNotifyEnd Sub					
  7. Trên các Tệp trình đơn, nhấp vào Làm cho ExcelRTD.dll để xây dựng các thành phần.

Sử dụng máy chủ RTD trong Excel

  1. Bắt đầu một bảng tính mới trong Microsoft Excel.
  2. Trong cell A1, nhập vào công thức sau đây, và sau đó bấm các NHẬP khóa:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Giá trị trả lại ban đầu là "AAA: 0". Sau năm giây, các giá trị Cập Nhật của "AAA: 10" và sau 10 giây, các bản cập nhật giá trị để "aaa:15," và như vậy.

  3. Trong tế bào A2, nhập vào công thức sau đây và nhấn ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"BBB", 3)
    Giá trị trả lại ban đầu là "BBB: 0". Mỗi năm giây tế bào giá trị gia số 3.

  4. Trong ô A3, nhập vào công thức sau đây và nhấn ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Giá trị trả lại ban đầu phù hợp với nội dung của ô A1 vì Đây là chủ cùng "đề" được sử dụng trong A1.

  5. Trong tế bào A4, nhập vào công thức sau đây và nhấn Enter:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 10)
    Giá trị trả lại ban đầu là "AAA: 0." mỗi năm giây tế bào bước tăng giá trị như làm các tế bào khác. Lưu ý rằng giá trị trả lại không phù hợp với nội dung của cell A1 hay A3 bởi vì sự kết hợp của các thông số thông qua các máy chủ là khác nhau.
Để minh hoạ này, máy chủ RTD được biên soạn và Excel đã sử dụng phiên bản thời gian chạy của các thành phần. Để gỡ lỗi các mục đích, RTD các máy chủ có thể được chạy từ IDE Visual Basic.

Để chạy trong chế độ gỡ lỗi:
  1. Thoát khỏi Microsoft Excel và chuyển sang các dự án trong Visual Cơ bản.
  2. Nhấn F5 để bắt đầu các thành phần. Nếu Thuộc tính dự án hộp thoại xuất hiện, nhấp vào Ok chọn tùy chọn mặc định Chờ đợi cho các thành phần được tạo ra.
  3. Hãy chắc chắn rằng cửa sổ ngay lập tức trong Visual Basic hiển thị. Khi bạn nhập vào công thức trong các tế bào và như các tế bào được Cập Nhật, kiểm tra các nội dung của cửa sổ ngay lập tức trong Visual Basic để xem hành động kích hoạt các sự kiện khác nhau.
Lưu ý về sự kiện DisconnectData

Trong khi Excel là một thuê bao để RTD máy chủ của bạn, nó gây nên các DisconnectData sự kiện khi nó không còn cần một chủ đề (ví dụ, khi bạn xóa hoặc xoá một công thức RTD trong một tế bào). Tuy nhiên, Excel không gọi DisconnectData về từng chủ đề cho các máy chủ RTD khi bảng tính đã đóng hoặc Excel quits; Thay vào đó, Excel gọi chỉ ServerTerminate. Khi bạn đang tạo một máy chủ RTD, bạn nên mã cho bất kỳ cần thiết clean-up của các chủ đề hoặc đối tượng khác khi các ServerTerminate sự kiện cháy.

(c) Microsoft Corporation 2001, tất cả các quyền Dự trữ. Những đóng góp của Lori B. Turner, Microsoft Corporation.

THAM KHẢO
Để biết thêm thông tin, bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
284883RTD máy chủ không gửi thông báo Cập Nhật nhiều Excel Instances
XL2007

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 285339 - Xem lại Lần cuối: 08/23/2011 10:42:00 - Bản sửa đổi: 2.0

  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • kbexpertisebeginner kbautomation kbhowto kbmt KB285339 KbMtvi
Phản hồi