转: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操作Word模板实现动态数据输出。比较实用。
ava_jacob_操作word_文档_进行写操作_如生成表格_添加_图片.docx
java运用poi操作word,替换word中的占位符填充数据,并将多个word合并成一个word,附件是java代码和相关jar包,以及测试模板,需要注意是,只适用2007以上的word
Java通过POI读取Excel遍历数据,根本word模板批量生成word文档,demo可运行,可根据需求修改
AVA设计模式 AVA设计模式 AVA设计模式
AVA数据集json标签文件ava.json测试标签数据80种类,google研究AVA人类行为数据集的标签文件
ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码
ava_v2.2.zip数据集。包含了标签和视频链接。
中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表
ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本
AVA 是一个项目,它提供视频的视听注释,以提高我们对人类活动的理解。 AVA 是一个项目,它提供视频的视听注释,以提高我们对人类活动的理解。每个视频片段都经过人工注释者的详尽注释,它们共同代表了丰富多样的...
可以替换掉正服的启动文件夹,就可以玩一眼服了。若是想换回来,我资源里面有正服的启动文件夹。
虹光ava5扫描仪驱动程序是一款可以有效解决虹光ava5扫描仪在使用过程中出现的一些问题的驱动工具,本站提供了虹光ava5扫描仪驱动下载地址,有需要的朋友们就来下载使用吧。 虹光ava5是一款平板式扫描仪,采用的是...
传统的AVA特征分析基于近似Zoeppritz方程,但是近似Zoeppritz方程并不适用于薄层。为获得更准确的薄煤层地震响应特征,建立了薄煤层模型,并采用基于Brekhovskikh方程的薄层反射系数谱理论,模拟薄煤层PP波与PS波的振幅...
Ava Find Professional 1.5 一个用来搜索本地硬盘文件的工具。专业版。
ava-8-Features java8的新特性 大家共同学习
Ava_Find硬盘搜索_1.5.218 单文件版本
数科转换服务,可将word、pdf文件转为ofd文件,下载后直接运行jar包,端口8090
问:为什么提示[请不要执行非法操作]? 答:您下载的程序,可能不是从官方网站下载的.可能是从别的地方下载,有不轨的人捆绑破解等操作. 如果出现这样的情况,请您立即全盘扫描病毒.然后从官方网站重新下载 问:运行...
ava常用Jar2