浅谈Excel开发(五) Excel的RTD函数

相关文章:

浅谈Excel开发(1) Excel开发概述

浅谈Excel开发(二) Excel 菜单系统

浅谈Excel开发(三) Excel 对象模型

上文介绍了Excel中的UDF函数,本文介绍一下同样重要的RTD函数。从Excel 2002开始,Excel引入了 一种新的查看和更新实时数据的机制,即real-time data简称RTD函数,他是一种Push-Pull的方式,及在 需要更新数据的时候,RTD给Excel Push一个消息说要更新数据,Excel在收到消息后主动拉取Pull新的数 据。RTD函数最开始的用途在于更新实时变化的数据,比如股票实时行情数据,实时天气预报数据,球队 比赛得分数据等等。

在过去,要实现这些功能,需要依赖一些其他诸如Dynamic Data Exchange(DDE)技术来访问实时数据 资源,但DDE和标准的Excel函数样式有很大的不同,并且并不是为Excel获取实时数据而设计的,缺乏健 壮性,并且效率不高,RTD的引入解决了这些问题。

本文首先介绍RTD的一些常用的使用场景,RTD函数的基本结构,注意事项,最后演示如何通过RTD函数 来实现从Google Financial API中获取实时行情数据。

一 使用场景

RTD函数很有用,如果您遇到以下情况,那么您应当考虑使用RTD函数了:

实时数据更新:这是很常见遇到的一种情景,比如说实时行情,实时天气情况,直播的比赛得分情况 等。

一些特殊的场景,比如说证券交易公司的交易系统,这些公司的某些模型会基于实时的行情或者指数 进行计算,通过RTD获取这些基础数据的实时数据之后,在此基础上可以进行动态的建模和分析。

异步的,耗时的数据请求:传统的UDF函数存在的一个问题是,他是同步的,就是说,如果某个函数的 执行时间过长,会导致前端界面的卡顿,尤其是在UDF函数访问数据库,WebService,或复杂的计算过程 等不确定性及耗时的执行环境时。基于RTD技术可以实现异步的UDF函数,从而带来更好的用户体验。

二 基本结构

Excel RTD函数是一个实现了IRtdServer接口的Com组件,Excel通过该Com组件与实时数据进行交互。 要实现RTD 函数,必须要实现IRtdServer这一接口,该接口位于 Microsoft.Office.Interop.Excel命名 空间中,跳转到定义,可以看到该接口的内部:

/// <summary>///  Represents an interface for a real-time data server./// 

</summary>[Guid("EC0E6191-DB51-11D3-8F3E-00C04F3651B8")]
[TypeLibType(4160)]
public interface IRtdServer2{/// <summary>    /// Adds new topics from a 

real-time data server. The ConnectData method is called    ///     when 

a file is opened that contains real-time data functions or when a user    /// 

    types in a new formula which contains the RTD function.    /// 

</summary>    /// <param name="TopicID">    /// 

Required Integer. A unique value, assigned by Microsoft Excel, which identifies the 

topic.</param>    /// <param name="Strings">Required Object. 

A single-dimensional array of strings identifying the topic.</param>    /// 

<param name="GetNewValues"> Required Boolean. True to determine if new 

values are to be acquired.</param>    /// <returns></returns> 

   [DispId(11)]dynamic ConnectData(int TopicID, ref Array Strings, ref bool 

GetNewValues);/// <summary>    /// Notifies a real-time data (RTD) server 

application that a topic is no longer in use.    /// </summary>   

 /// <param name="TopicID"> Required Integer. A unique value assigned 

to the topic assigned by Microsoft Excel.</param>    [DispId(13)]void 

DisconnectData(int TopicID);
    [DispId(14)]int Heartbeat();
       /// <summary>    /// This method is called by Microsoft Excel to get 

new data.    /// </summary>    /// <param 

name="TopicCount">TopicCount:    ///     Required Integer. 

The RTD server must change the value of the TopicCount    ///     to the 

number of elements in the array returned.</param>    /// 

<returns></returns>    [DispId(12)]Array RefreshData(ref int 

TopicCount);
       /// <summary>    /// The ServerStart method is called immediately 

after a real-time data server    ///     is instantiated. Negative value 

or zero indicates failure to start the server;    ///     positive value 

indicates success.    /// </summary>    /// <param 

name="CallbackObject">Required Microsoft.Office.Interop.Excel.IRTDUpdateEvent 

object. The callback object.</param>    /// <returns></returns> 

   [DispId(10)]int ServerStart(IRTDUpdateEvent CallbackObject);
         /// <summary>    /// Terminates the connection to the real-time 

data server.    /// </summary>    [DispId(15)]void 

ServerTerminate();
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索excel
, 数据
, 函数
, server
, excel 函数
, 实时
, required
sql serverstart withwith
rtd函数、rtd1185dd 开发、excel rtd函数、rtd1185dd 开发资料、浅谈老婆被开发经验,以便于您获取更多的相关知识。

时间: 2024-10-26 11:17:24

浅谈Excel开发(五) Excel的RTD函数的相关文章

浅谈PHP开发团队的管理之道

说明:本文节选自<浅谈PHP开发团队管理及程序员做人问题>.全文请点击这里访问. 看了标题,也许很多程序员会反感的说:"程序员的做人问题先不用谈,你想出来这个标题,那你做人是不是有问题吧!" 笔者本人并不反驳这样的说法,每个人都有自己的做人原则.法国人的那句俗话说的好:"我不苟同你的思想,但是我绝对捍卫你思想的自由". 是,这是站在个人的立场上可以那么说.但是如果站在一个团队的立场上呢?一切不尽然了! 无论马拉车的原理也好,还是木桶原理也好,西方人整出来

浅谈Android开发中项目的文件结构及规范化部署建议_java

一.几句话 使用Gradle及其推荐的项目框架 把密码等敏感数据放入gradle.properties 不要自己写Http客户端,使用Volley或OkHttp库 使用Jackson库来解析JSON数据 避免Guava并出于Dalvik 65K methods limit不要使用过多的库 使用Fragment来绘制UI界面 Activity主要用来管理Fragment 布局文件XML也是代码,好好组织它们 在布局文件里,使用styles以避免重复的属性 使用多个style文件而不是一个巨大的st

浅谈php fopen下载远程文件的函数_php实例

如下所示: //下载附件 function get_file($url, $folder = "./") { set_time_limit (24 * 60 * 60); // 设置超时时间 $destination_folder = $folder . '/'; // 文件下载保存目录,默认为当前文件目录 if (!is_dir($destination_folder)) { // 判断目录是否存在 mkdirs($destination_folder); // 如果没有就建立目录

浅谈JS中的bind方法与函数柯里化_javascript技巧

绑定函数bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值.不同于call和apply只是单纯地设置this的值后传参,它还会将所有传入bind()方法中的实参(第一个参数之后的参数)与this一起绑定. 关于这个特性看<JS权威指南>原文的例子: var sum = function(x,y) { return x + y }; var succ = sum.bind(null, 1); //让this指向null,其后的实参也会作为实参传入被绑定的函数sum

浅谈Python类里的__init__方法函数,Python类的构造函数_python

如果某类里没有__init__方法函数,通过类名字创建的实例对象为空,切没有初始化:如果有此方法函数,通常作为类的第一个方法函数,有点像C++等语言里的构造函数. class Ca: def __init__(self, v): # 注意前后各两个下划线 self.name = v def pr(self): print "a--->", self.name ia = Ca("Jeapedu") # 本质调用的是__init__方法函数 ia.pr() Ca.

浅谈php中变量的数据类型判断函数

在php中我们可以通过 var_dump()打印出变量的类型和值.同时我们可以通过一些函数判断变量的类型.如果只是想得到一个变量的数据类型,可以使用gettype()函数,gettype($t) 返回$t的数据类型的字符串,要是$t不属于php中8种基本变量类型,返回"unknow type".我们还可以通过is_type系类函数直接判断是否为type类型函数,是的话返回true ,不是返回false. 如: is_bool()        是否为布尔型 is_int()      

浅谈php fopen下载远程文件的函数

如下所示: //下载附件 function get_file($url, $folder = "./") { set_time_limit (24 * 60 * 60); // 设置超时时间 $destination_folder = $folder . '/'; // 文件下载保存目录,默认为当前文件目录 if (!is_dir($destination_folder)) { // 判断目录是否存在 mkdirs($destination_folder); // 如果没有就建立目录

浅谈Excel开发(1) Excel开发概述

做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识.目前Office相关的开发资料是比较少的,最最开始的时候,我看的是一本英文资料,然后再就是MSDN上面去提问了.所以我想写一点东西,让大家也少走一些弯路. 这篇文章就简要介绍一下Office开发的一些相关的知识,使大家对这个有一个大体的了解. 首先来看一看Office 的开发方式. 一 Office开发方式 1 VBA (Visual Basi

浅谈Symphony Spreadsheet在Excel报表测试中的应用

读者通过阅读本文,可以学习到 Symphony Spreadsheet 简单公式的书写,以及一些使用技巧,可以快速的运用到报表测试中,降低测试复杂度,有效提高测试结果准确性. 报表测试中常见数据对比 在 ERP 和 BI 项目测试过程中,对报表数据进行校验是非常有必要的,常见的数据对比场景如下:从系统导出的 http://www.aliyun.com/zixun/aggregation/16544.html">Excel 格式的报表数据,然后再给一份业务数据的源数据,要求校验报表数据是否正

浅谈Java开发人员对JCP感觉失望的原因

其中一种感觉就是JCP已经失去了它的吸引力,它不再是被当成针对解决问题的社区,相反,它只是被看成是一些大公司所利用的鉴定规范通过的橡皮图章.这些大公司凭着自身的钱势和力量来指定各种规范从而达到满足自己的利益. "这与有些官僚机构很相似,只不过是JCP在短时间出现这样的发展显得过于迅速." Redwood城市的Infravio公司的CTO,MukundBalasubramanian谈到JCP时,他这样说到,"现在有太多的程序员和公司都卷入JCP,每天都开发很多软件,每天都有大量