Java与VBA通讯实践
来源:互联网 发布:上海巨人网络校招 编辑:程序博客网 时间:2024/06/05 11:17
1. DDE(动态数据交换)方式
VBA具有DDE能力,Java没有。网上搜索了一下,有几个公司开发了这方面的类库,可以使Java具有DDE能力。
(1)JavaDDE - nevaobject:
http://www.nevaobject.com/_docs/_javadde/JavaDde.pdf
(2)WinPack - jniwrapper:
http://www.jniwrapper.com/pages/winpack/overview
两个类库号称都很强,但是都要求付费,就没怎么研究。玩了一下winpack的demo,几乎所有windows的工具,如察看硬盘,网络连接,用户管理等等,都可以用它的类库使用Java语言来包装。
2. Com Dll方式
这种方法理论上可以,但是Excel文件带着dll到处跑的话,总觉得不像话。
(1)Sun ActiveX Bridge - Sun提供的方法。具体参见下面网页。
http://java.sun.com/j2se/1.4.2/docs/guide/beans/axbridge/developerguide/index.html
简要用法:
-1. Write a java bean, and use java activex bridge to create dll.
(2)j-integra提供了两种解决方案。
前期绑定和后期绑定。后期绑定无需知道通讯的Java对象信息,将Java对象注册给虚拟机之后(使用j-integra工具),即可在运行时动态寻找到对象。
前期绑定速度比后期绑定快,但是要在编译之前注册JVM到VB工程。
前期绑定方法:http://j-integra.intrinsyc.com/support/com/doc/javafromcom/vb2javaeb.html
后期绑定方法:http://j-integra.intrinsyc.com/support/com/doc/javafromcom/vb2javalb.html
(3)微软的工具Microsoft SDK for Java
不过由于微软和sun的官司,在微软网站上已经无法下载这个工具了。
HomePage: http://www.microsoft.com/mscorp/java
3. Socket 通信
利用Socket通信,Java作为服务器端,VBA作为客户端。这种情况下,是不是java都没有关系了。
Java服务器端程序比较好写。关键是VBA客户端。
(1)使用Wsock控件当然是最简单的,但是我们的代码不能出现窗口,也就不能使用Wsock。而且我电脑上莫名其妙的不能使用Wsock,原因是未得到认证。不知为何。
(2)BASP21.DLL Socket Object:用这个Dll可以替代Wsock控件。但是最好不使用Dll。
http://www.hi-ho.ne.jp/babaq/eng/basp21s.html
(3)CSocketMaster 1.2 & CSocketPlus 1.1
VB模块,全代码,非控件,将模块导入VBA中即可。而且有详尽的例子,在VB上运行的非常好。但是在VBA中,导致Excel频频Crash,百思不得其解,不知为何。
比如其中有段代码:
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=54681&lngWId=1
(4)CSocket class - replacement for the MS Winsock Control
翻了一个晚上,终于找到了这个Module, 上面提到的CSocketMaster 也是根据这个改编的。
在VBA上使用了一下这个Module,比较流畅。
主页:http://www.vbip.com/winsock-api/csocket-class/csocket-class-01.asp
VBA具有DDE能力,Java没有。网上搜索了一下,有几个公司开发了这方面的类库,可以使Java具有DDE能力。
(1)JavaDDE - nevaobject:
http://www.nevaobject.com/_docs/_javadde/JavaDde.pdf
(2)WinPack - jniwrapper:
http://www.jniwrapper.com/pages/winpack/overview
两个类库号称都很强,但是都要求付费,就没怎么研究。玩了一下winpack的demo,几乎所有windows的工具,如察看硬盘,网络连接,用户管理等等,都可以用它的类库使用Java语言来包装。
2. Com Dll方式
这种方法理论上可以,但是Excel文件带着dll到处跑的话,总觉得不像话。
(1)Sun ActiveX Bridge - Sun提供的方法。具体参见下面网页。
http://java.sun.com/j2se/1.4.2/docs/guide/beans/axbridge/developerguide/index.html
简要用法:
-1. Write a java bean, and use java activex bridge to create dll.
CODE: [Copy to clipboard]-2. Write the VBA in Excel.C:/Program Files/Java/j2re1.4.2/axbridge/bin>C:/j2sdk1.4.2/bin/packager -clsid {D824B185-AE3C-11D6-ABF5-00B0D07B8581} -out . -reg F:/excelvba/excelvba.jar jp.co.esm.pmt.PMTBean
(2)j-integra提供了两种解决方案。
前期绑定和后期绑定。后期绑定无需知道通讯的Java对象信息,将Java对象注册给虚拟机之后(使用j-integra工具),即可在运行时动态寻找到对象。
前期绑定速度比后期绑定快,但是要在编译之前注册JVM到VB工程。
前期绑定方法:http://j-integra.intrinsyc.com/support/com/doc/javafromcom/vb2javaeb.html
后期绑定方法:http://j-integra.intrinsyc.com/support/com/doc/javafromcom/vb2javalb.html
(3)微软的工具Microsoft SDK for Java
不过由于微软和sun的官司,在微软网站上已经无法下载这个工具了。
HomePage: http://www.microsoft.com/mscorp/java
3. Socket 通信
利用Socket通信,Java作为服务器端,VBA作为客户端。这种情况下,是不是java都没有关系了。
Java服务器端程序比较好写。关键是VBA客户端。
(1)使用Wsock控件当然是最简单的,但是我们的代码不能出现窗口,也就不能使用Wsock。而且我电脑上莫名其妙的不能使用Wsock,原因是未得到认证。不知为何。
(2)BASP21.DLL Socket Object:用这个Dll可以替代Wsock控件。但是最好不使用Dll。
http://www.hi-ho.ne.jp/babaq/eng/basp21s.html
(3)CSocketMaster 1.2 & CSocketPlus 1.1
VB模块,全代码,非控件,将模块导入VBA中即可。而且有详尽的例子,在VB上运行的非常好。但是在VBA中,导致Excel频频Crash,百思不得其解,不知为何。
比如其中有段代码:
CODE: [Copy to clipboard]不知道这个EbMode干吗用的,MSDN上也查不到有价值的东西。如果注释掉这段代码,会导致VB崩溃。Const MOD_VBA5 As String = "vba5" 'Location of the EbMode function if running VB5
Const MOD_VBA6 As String = "vba6" 'Location of the EbMode function if running VB6
If Subclass_InIDE Then
'Patch the jmp (EB0E) with two nop's (90) enabling the IDE breakpoint/stop checking code
Call api_CopyMemory(ByVal nAddrSubclass + 12, &H9090, 2)
i = Subclass_AddrFunc(MOD_VBA6, FUNC_EBM) 'Get the address of EbMode in vba6.dll
If i = 0 Then 'Found?
i = Subclass_AddrFunc(MOD_VBA5, FUNC_EBM) 'VB5 perhaps, try vba5.dll
End If
Debug.Assert i 'Ensure the EbMode function was found
Call Subclass_PatchRel(PATCH_01, i) 'Patch the relative address to the EbMode api function
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=54681&lngWId=1
(4)CSocket class - replacement for the MS Winsock Control
翻了一个晚上,终于找到了这个Module, 上面提到的CSocketMaster 也是根据这个改编的。
在VBA上使用了一下这个Module,比较流畅。
主页:http://www.vbip.com/winsock-api/csocket-class/csocket-class-01.asp
- Java与VBA通讯实践
- JAVA 与SOCKET通讯
- Flex 与 java 通讯 【转】
- C与java通讯小结
- Java与数据库通讯方式
- Java 理论与实践
- Redis与Java - 实践
- WebSocket实时通讯实践
- Java与flash的TCP通讯
- 与MQ通讯的完整JAVA程序
- java与Flash的Socket通讯
- Android 模拟器(JAVA)与C++ socket 通讯
- 与MQ通讯的完整JAVA程序
- Java与C++Socket通讯注意
- Java与C通讯 网络流解析
- 与MQ通讯的完整JAVA程序
- Java Socket 模拟客户端与服务器端通讯
- erlang与java构建的节点通讯
- [转] PHP开发框架总结
- 经理人所必需具备的素质
- 在ASP.NET中创建安全的web站点
- 什么是web.config
- 常用易懂的精品源码
- Java与VBA通讯实践
- javascript 常用类
- 人人用得着的IE插件屏蔽工具Upiea
- vbscript 与 javascript如何传递变量(包括服务器端与客户端)
- vbscript和javascript互相调用方法
- 谜格大全
- 高级查找/替换、正则表达式练习器、Javascript脚本程序调试器
- 关于认证的看法(整理自ItPub)
- 很牛X的右键菜单