dde是为了实现进程间动态的数据交换,适合于两个程序之间的数据交换频率较大的情况,也就是交换实时数据。ddeml类库已经实现了对dde的包装,并且操作起来很方便。本人使用的便是ddeml库。
我的任务是使用dde来将实时数据发送的excel,首先创建一个dde服务器(如:serv1),注册几个主题(如: topic1)。然后打开excel,选择一个cell单元,往里面输入=serv1topic1!'aaaaa',dde服务器就会进行响应,根据主题和item读取一个及时数据,返回到当前的单元格。这样一来,我就可以定制一张excel表格,里面放上我想要的数据,这些数据始终是最新的。
实现的步骤如下
1、导入所有所需的ddeml的api函数和常量
2、初始化dde对象
3、注册一个服务,并申请几个主题(topic)字符串
4、编写回调函数中的消息处理程序
5、编写相应消息进行取值的部分
要实现这一点,需要克服几个技术问题
1、受委托的回调函数的使用方法
2、数据回传到excel中的格式
3、消息处理过程
首先讲述问题3,
当用户往excel敲进公式时,ddeserver就会有响应,它会记下用户公式的各部分。
然后去查找实时信息,返回一个值,这个值就是要添入到当前cell中的值。
取到值后,调用ddeml的ddepostadvise函数,它会激发回调函数的xtyp_advreq消息
该消息中调用ddecreatedatahandle函数,把这个新的值放回对应的cell中。
注意:ddepostadvise的调用并不一定马上触发xtyp_advreq消息,该函数内部使用postmessage,
而不是sendmessage,系统会收集一些xtyp_advreq消息一并处理,这时你就要区分那个cell对应那个值了。这个问题不难解决,你自己想办法吧。
讲述问题1,
dde初始化需要调用一个接受委托的回调函数
public declare function ddeinitialize lib "user32" alias "ddeinitializea" (byref pidinst as integer, byval pfncallback as ddecallbackdelegate, byval afcmd as integer, byval ulres as integer) as short
只要你试过一遍,就会觉得它的调用实际上很简单,这方面的资料也很多。关键就是回调函数声明的形式和定义的形式必须一致,否则将不能调用。
private _ddecallback as ddeml.ddecallbackdelegate = nothing
_ddecallback = new ddeml.ddecallbackdelegate(addressof ddecallback)
dim ddeinst as integer
ddeinst = ddeml.ddeinitialize(g_linstid, _ddecallback, ddeml.appclass_standard, 0)
dde初始化函数被调用之后,当前进程就会把dde的消息添加到消息循环中,如果收到这些消息,就会调用这个回调函数ddecallback来处理。
第2个问题
要想让cell接受你的值,随便传一个字符串它是不接受的,你要使用xltable格式传递,当然,如果你做的是dde客户端,什么格式也就无所谓了。(这时我经过大量的实验得到的,如果你有好办法,就请分享一下。)
10 00 04 00 01 00 03 00
tdttable, cb=4, rows=1, columns=3
02 00 10 00
tdtstring, cb=16
04 45 61 73 74
cch=4, east (tdtstring continued)
04 57 65 73 74
cch=4, west (tdtstring continued)
05 4e 6f 72 74 68
cch=5, north (tdtstring continued)
我的最后问题是tdttable不能填写多个cell,以上格式是微软文档中的,实际上不行,不知道为什么。把数据写在第一个td中。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器