转:http://aa8945163.iteye.com/blog/965107
Jacob,项目地址是:http://sourceforge.net/projects/jacob-project/ ,目前最新的更新是2011年2月份的,本文将着重介绍如何通过这个项目去调用宏。
项目介绍完毕,现在正式开始介绍如何通过Jacob去调用宏。首先,需要下载Jacob的发布包,里面应该包含一个jar包:jacob.jar(放在项目的classpath下),两个dll文件:jacob-1.15-M4-x64.dll、jacob-1.15-M4-x86.dll,两个dll文件请根据系统架构属性选择其中一个,然后放在path路径下(也可以直接放在C:\WINDOWS\system32下面)。这样就可以开始编写调用宏的java程序了。
调用word宏
第一步,录制宏
在d盘根目录下(文档存放在哪里没有要求)新建一个word文档,名为test1.doc,打开,然后录制一段宏(具体录制哪类宏自便,调用时无需传参数即可,但是宏的保存方式要选择“所有文档(Normal)”,这样任何文档都可以调用这个宏了),宏名为macro1。
第二步,将test1.doc中宏macro1产生的影响撤销(比如那段宏是输入一段文字,那么就把这段文字删除)并保存,以便观察测试。
第三步,编写java调用代码
Java代码
ActiveXComponent word=new ActiveXComponent("Word.Application");
Dispatch documents = word.getProperty("Documents").toDispatch();
Dispatch document = Dispatch.call(documents, "Open", "d:/test1.doc").toDispatch();//指定要打开的文档并且打开它
Dispatch.call(word, "Run", new Variant("macro1"));//在这个文档上运行宏
第四步,执行这段java代码
执行完成之后,可以发现被撤销的宏影响又回来了,说明宏调用成功。
第五步,高级特性
在相同目录下(文档存放目录没有规定)新建一个空白的word文档test2.doc,然后将以上代码修改为:
Java代码
ActiveXComponent word=new ActiveXComponent("Word.Application");
Dispatch documents = word.getProperty("Documents").toDispatch();
Dispatch document = Dispatch.call(documents, "Open", "d:/test2.doc").toDispatch();//指定要打开的文档并且打开它
Dispatch.call(word, "Run", new Variant("macro1"));//在这个文档上运行宏
执行以上代码,可以发现,我们在test1.doc上录制的宏也可以在test2.doc上运行成功(当然选择宏保存时必须要保存到“所有文档(Normal)”中)。
深入探索
以上的例子只是一个很简单的没有参数的宏调用,如果有参数又该如何调用呢?其实有参数的情况也不是很复杂,只需将以上调用的java代码稍微修改下即可实现:
Java代码
ActiveXComponent word=new ActiveXComponent("Word.Application");
Dispatch documents = word.getProperty("Documents").toDispatch();
Dispatch document = Dispatch.call(documents, "Open", "d:/test1.doc").toDispatch();//指定要打开的文档并且打开它
Dispatch.call(word, "Run", new Variant("macro1"),new Variant(arg1),new Variant(arg2),..);//在这个文档上运行宏,并包含多个参数
调用excel宏
调用excel宏和调用word宏有点区别,因为excel不能将宏保存到“所有文档(Normal)”上,因此在调用宏的时候需要指明宏所在的具体文档,最后一条语句需要这么写:
Java代码
Variant result = Dispatch.call(excel, "Run", new Variant("test.xls!Module1.test"),//这里需要说明宏所在的文档
new Variant(arg1),
new Variant(arg2));
总结
利用java直接调用office宏的应用场景非常广泛,比如在对文档进行加密、解密和其它保护时特别有用。带参数的宏调用甚至可以灵活的编写成模版宏然后将业务数据注入到相关文档中,而且因为是通过office自己操作自己,所以office文档绝不会出现其它的用java操作office文档时可能出现的文档变异问题,在某些重要文档的操作上非常有用(比如文档格式要求非常严格的合同文档上)。另外,Jacob本身就可以通过调用com来直接操作office(包括编辑),而且office文档不会有任何变异,只是编码难度可能比较大,具体的操作方式这里就不赘述了,可以参考相关api。
相关推荐
在Java应用中,我们通常使用XWPF(XML Word Processing)API来操作DOCX文件,而HWPF(Horrible Word Processor Format)API则用于处理DOC文件。 2. **数据填充** 在Word文档中,我们可以预先定义一些占位符,例如`...
《AVA体验服启动文件夹详解及操作指南》 在电子游戏中,体验服通常是开发者为了测试新功能、新内容而设立的服务器,玩家可以在其中提前体验到游戏的更新内容。《AVA(Allied Vision Assault,全称《战地之王》)》...
《AVA v2.2:深度学习中的动作识别与数据集详解》 在人工智能领域,特别是计算机视觉和机器学习,动作识别是一项重要的研究课题。而AVA(A Video Dataset for Human Action Recognition)v2.2,是由Google Research...
本教程将重点讲解如何使用Apache POI库来读取Excel数据,并基于这些数据批量生成Word文档。Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 ...
AVA数据集json标签文件ava.json测试标签数据80种类,google研究AVA人类行为数据集的标签文件
Ava_Find 1.5.218作为一款高效的硬盘搜索工具,凭借其快速的搜索速度、丰富的过滤选项和便捷的操作体验,为用户提供了强大的文件查找功能。单文件版本的设计使其成为一款理想的便携式工具,适合各种场合下使用。无论...
《AVA数据集:深入探索人类动作理解》 AVA(Action Genome)数据集是谷歌公司推出的一个庞大而精细的视频数据库,旨在推动计算机视觉领域中人类行为的理解与分析。这一数据集的发布,对于人工智能,尤其是视频理解...
中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表
ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本
Ryujinx.Ava.exe
图像美学质量评价数据集AVA下载链接,可用迅雷下载!文件30G左右较大,建议在网速良好的状态下下载。
虹光ava5扫描仪驱动程序是一款可以有效解决虹光ava5扫描仪在使用过程中出现的一些问题的驱动工具,本站提供了虹光ava5扫描仪驱动下载地址,有需要的朋友们就来下载使用吧。 虹光ava5是一款平板式扫描仪,采用的是...
- **Promise 和 async/await 支持**:由于JavaScript中异步操作的广泛使用,AVA支持Promise和async/await,使得编写异步测试变得更加直观。 - **错误堆栈清理**:AVI会清理错误堆栈,只保留与测试相关的部分,帮助...
《ava编程自学软件官方版——探索编程学习新维度》 在当今信息时代,编程技能已成为一项重要的职业技能,而ava作为一款流行的编程语言,其应用范围广泛,从移动应用开发到服务器端编程,都有ava的身影。因此,ava...
Ava Find Professional 1.5 一个用来搜索本地硬盘文件的工具。专业版。
谷歌在2017年发布的AVA数据集(论文编号1705.08421)是一个具有开创性的视频数据集,用于研究和理解人类在视频中进行的原子级视觉动作。AVA数据集的出现,对当时的视频理解研究带来了新的视角和挑战。 首先,AVA...
"AVA启动文件夹(正服)"主要是为了防止在体验服游玩时,由于误操作或疏忽导致正服的游戏设置被覆盖或丢失。体验服通常会进行新内容的测试,其配置可能与正服有所不同,如果直接覆盖,可能会导致正服的个人设置丢失...
### AVA设计模式详解 #### 一、设计模式概述 设计模式是软件工程领域中一种重要的设计理念和技术手段,它能够帮助开发者解决常见的设计问题,并提高软件的可维护性和可扩展性。在J2EE(Java 2 Enterprise Edition...