使用 Visual c + + 创建的 Excel 2002 或更高版本的 Excel R...

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:53:42


Microsoft Excel 2002 和更高版本的 Excel 提供了一个名为 RealTimeData (RTD) 的工作表函数。 RealTimeDat...

Microsoft Excel 2002 和更高版本的 Excel 提供了一个名为 RealTimeData (RTD) 的工作表函数。 RealTimeData 的工作表函数允许您调用组件对象模型 (COM) 自动化服务器,用于检索实时数据的目的。 本文介绍了使用 Microsoft Visual c + + 创建一个 RealTimeData Server RTD 函数的 Excel 中使用。

VCRTDServer.exe 示例包含工作用 Visual c + + 编写的 RTD 服务器的演示。 在 Microsoft Windows 98、 Microsoft Windows 尖端版 (Me)、 Microsoft Windows NT、 Microsoft Windows 2000、 Microsoft Windows XP,和 Intel 平台上,将运行该示例。

以下文件是可从 Microsoft 下载中心下载: Download VCRTDServer.exe now (http://download.microsof...

以下文件是可从 Microsoft 下载中心下载:
收起这个图片展开这个图片 Download VCRTDServer.exe now (http://download.microsoft.com/download/excel2002/sample/1.0/w982kmexp/en-us/vcrtdserver.exe) 发布日期: 21,2002 年十月

有关如何下载 Microsoft 支持文件的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 119591  (http://support.microsoft.com/kb/119591/ ) 濡備綍鑾峰緱 Microsoft 支持文件从联机服务 Microsoft 扫描此文件的病毒。 Microsoft 使用该文件的过帐日期上可用的最新病毒检测软件。 该文件存储在安全性得到增强的服务器,以帮助防止未经授权对其进行更改文件上。

VCRTDServer.exe 文件包含以下文件: 收起该表格展开该表格 文件名称 大小 RTDServer.dsw 541 字节 RTDServer.dsp 4909 的字节数 RTDServerDLL.cpp 11168 的字节数 RTDServerDLL.h 1265 字节 RTDServerImpl.cpp 19560 的字节数 RTDServerImpl.h 2701 的字节数 RTDDataThread.cpp 3051 的字节数 RTDDataThread.h 742 字节 TList.h 6880 的字节数 RTDServer.def 318 字节 IRTDServer.idl 1937 字节 Resource.h 455 字节 Script.rc 1616 字节 RTDServerSample.xls 30208 的字节数 回到顶端

RealTimeData 服务器的结构


RTD 工作表函数的语法如下: = RTD(ProgID,Server,String1,[String2],...) 第一个参数 ProgID,代表 RealTimeData 服务器程序标识符 (ProgID)。 参数用于指示在其运行 RealTimeData 服务器计算机的名称服务器。 此参数可以是空字符串,或如果,则可以省略服务器本地运行的 RealTimeData。 其余的参数表示要发送到 RealTimeData 服务器的参数。 这些参数的每个唯一组合表示一个"主题",Excel 将分配唯一 TopicID。 参数区分大小写。 下面的示例说明了对 RTD 服务器导致三个单独 TopicIDs 的调用: = RTD("VCRTDServer.RTDFunctions",,"AAA","10")

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

= RTD("VCRTDServer.RTDFunctions",,"aaa","5")
对于要是 RealTimeData 服务器 RTD 函数的 Excel 中使用一个 COM 自动化服务器 COM 自动化服务器必须实现 IRTDServer 接口。 服务器必须实现 IRTDServer 的所有的方法:

ServerStart
STDMETHODIMP ServerStart(IRTDUpdateEvent *CallbackObject, long *pfRes)                
ServerStart 方法称为实时数据服务器实例化后立即。 第一个参数是在 RTDServer 调用以指示新的数据是可用的 IRTDUpdateEvent 接口指针。 第二个参数是必须设置为正值,以指示成功的指针。 "0"或负的值则表示失败。 ServerTerminate
STDMETHODIMP ServerTerminate(void)                
ServerTerminate 结束到实时数据服务器连接。 ConnectData
STDMETHODIMP ConnectData(long TopicID, SAFEARRAY **Strings, VARIANT_BOOL *GetNewValues, VARIANT *pvarOut)                
ConnectData 从实时数据服务器中添加新的主题。 打开包含实时数据函数 Excel 文件,或当用户键入一个新的公式中包含的 RTD 函数时,被称为 ConnectData 方法。

TopicID 参数包含由 Excel 分配给标识该主题的值。 字符串 是安全的数组,包含在 RTD 公式中用于标识要能提供服务的数据的字符串数组。 GetNewValues 参数是一个布尔值,指示是否检索新值,或不。 最后,pvarOut 必须设置为该主题的初始值。 DisconnectData
STDMETHODIMP DisconnectData( long TopicID)                
DisconnectData 通知给 RTD 服务器应用程序将不再使用某个主题。 在 TopicID 标识不再使用的主题。 检测信号
STDMETHODIMP Heartbeat(long *pfRes)                
如果自上次从 RealTimeData 服务器更新的提示的 Excel 超过特定的间隔,由 Excel 称为 检测信号。 检测信号允许 Excel 确定的实时数据服务器是否仍处于活动状态。 pfRes 参数必须填入"0"或负数来指示失败。 正数表示成功。 RefreshData
STDMETHODIMP RefreshData( long *TopicCount, SAFEARRAY **parrayOut)                
调用此方法通过 Microsoft Excel 以获取新的数据。 此方法调用仅在该方法通过通知实时数据服务器是新的数据后发生。

必须用该 safearray 中主题的计数填充 TopicCountparrayOut 参数必须用二维 safearray 填充。 在第一个维度中包含的主题 id 的列表。 第二个维度包含的那些主题的值。

有关示例 RTD 服务器

示例 RTD 服务器是用 Visual c + + 编写的 RTD 服务器可能工作方式的简单示例。 RTDServerDLL.cpp/.h 包含类工厂和自注册代码为该 RTD 服务器。 RTDServerImpl.cpp/.h 包含实际的 RTD 服务器的实现。 为了便于 IDispatch 接口实现,RTD 服务器到委托的调用使用 IRTDServer.idl 中定义的类型信息。 此类型的信息是 IRTDServer 接口在 ExcelXP 的类型库中定义的副本。 因为在很多的情况下为 RTD 服务器的数据以异步方式到达,RTDDataThread.cpp/.h 定义新数据可用时通知 Excel 在第二个线程。

在 Excel 中使用 RTD 服务器

下载内容中包括该"RTDServerSample.xls"Excel 工作簿包含 RTD 公式中使用示例服务器。 若要用于示例工作簿可以重新生成并注册示例 RTD 服务器 (通过使用 Regsvr32.exe),然后打开 Excel 工作簿。

注意 褰撴偍浣跨敤 Microsoft Office Excel 2003 锛屾垨 Microsoft Excel 2002 涓椂确保宏安全性设置为 或为 ,或 RTD 服务器不能运行。

如果您希望在创建您自己的 Excel 工作簿使用示例 RTD 服务器,请按照下列步骤操作:
  1. 在 Microsoft Excel 中启动新工作簿。
  2. 在单元格 A1 中输入以下公式,然后按 ENTER:
    =RTD("VCRTDServer.RTDFunctions",,"Hello")                    
    的返回值由组成 TopicID 的分配由 Excel 和当前系统时间。

  3. 单元格 A2 中输入以下公式,然后按 ENTER:
    =RTD("VCRTDServer.RTDFunctions",,"Hello")                    
    的初始返回值匹配的单元格 A1 的内容,因为这是同一"主题"在 A1 中使用的。

  4. 在单元格 A3 中输入以下公式,然后按 ENTER:
    =RTD("VCRTDServer.RTDFunctions",,ADDRESS(ROW(), COLUMN()))                    
    此公式使用单元格的地址来构造一个字符串,唯一的主题。 您可以复制并粘贴到与要查看由 Excel 分配该唯一 TopicIDs 的多个单元格该公式。
注意 您必须知道以下 DisconnectData 事件有关的信息:

虽然 Excel 是 RTD 服务器到订阅服务器,Excel 触发 DisconnectData 事件当不再需要在一个主题 (渚嬪删除时或您清除 RTD 公式的单元格中)。 但是,Excel 不调用 DisconnectData 上每个主题为 RTD 服务器或 Excel 退出时关闭工作簿。 而是,Excel 调用仅 ServerTerminate。 创建的 RTD 服务器时您必须代码进行任何清理的主题或其他对象的 ServerTerminate 事件触发时。