jcob.docx

上传人:b****5 文档编号:6274530 上传时间:2023-01-05 格式:DOCX 页数:33 大小:25.59KB
下载 相关 举报
jcob.docx_第1页
第1页 / 共33页
jcob.docx_第2页
第2页 / 共33页
jcob.docx_第3页
第3页 / 共33页
jcob.docx_第4页
第4页 / 共33页
jcob.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

jcob.docx

《jcob.docx》由会员分享,可在线阅读,更多相关《jcob.docx(33页珍藏版)》请在冰豆网上搜索。

jcob.docx

jcob

java调用com组件操作word使用总结(jacob)java2008-12-0520:

58:

19阅读599评论0字号:

大中小订阅.

java调用com组件操作word使用总结(jacob)

简单描述

在此处输入简单摘要

特别声明:

使用java-com技术可以完成任何VBA可以完成的office文档操作;

 一、准备工作

  先了解一下概念,JACOB就是JAVA-COMBridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。

这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。

  Jacob下载地址:

我在这里下载了Jacob1.14.3和jacob1.9的版本两个版本

  这里下载的是目前最新的Jacob1.14.3的Release版。

另外java操作word方式还有(个人认为通过jacob最好,自己可以扩展,网上除poi之外几乎全是java-com技术实现的):

(1):

ApachePOI-JavaAPIToAccessMicrosoftFormatFiles(http:

//poi.apache.org/);对word处理不够强处理Excel功能可以,但是全是通过java完成的,不需要com组件支持;

(2):

java2word是一个在java程序中调用MSOfficeWord文档的组件(类库)。

该组件提供了一组简单的接口,以便java程序调用他的服务操作Word文档。

(好象也是用的java-com技术);

(3)web开发语言操作word的功能最好还是用第三方的控件,看看这个SOAOFFICE,还可以使用js写VBA呢

二、安装Jacob

  Jacob的安装非常的简单,我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件,如果是Jacob1.14.3则是jacob-1.14.3-x86.dll(32位,机和jacob-1.14.3-x64.dll(64位)和jacob.jar两个文件。

Jacob.dll直接放到系统的system32文件夹下就行了,连注册都不用的(或者拷贝到jdk或者jre的bin目录下也行,当前测试文件所在的目录也行,就是只要在java.library.path中就可以)。

而jacob.jar设置到classpath中去就可以了,或者在IDE开发环境的工程中设置扩展库也一样的,我是这样使用的将jacob-1.14.3-x86.dll或复制到%Tomcat5%\bin目录下将jacob.jar复制到%Tomcot5%\Share\lib目录下,我使用过程中感觉放到这里是一个最终解决办法,当你放哪都有问题的时候。

我这样用之后再没有出过因为系统不一样出现的各种各样的问题,当然你作的是web的项目。

注意使用jacob一写要安装word,我装的word2003,如果是操作word2007就不用jacob了(好像这方面的API)。

对jacob.dll几种配置方法(网上看到):

2008-07-3111:

59:

49

1、把jacob.dll文件,复制到windows\system32目录下。

(注:

我用的时候这个方法不能运行)

2、把jacob.dll放入Java\jdk1.5.0_06\jre\bin目录下.把jacob.jar放入Java\jdk1.5.0_0\jre\lib\ext

目录下.可以正常运行。

3、把jacob.dll放入\glc\src目录下.把jacob.jar放入WEB-INF\lib目录下,也是可以正常运行。

三、使用(以下是我改写的一个word操作类,希望有兴趣的朋友完善,记得发给我一份)

//注意java操作word关键是定位操作对象;

importcom.jacob.activeX.ActiveXComponent;

import.Dispatch;

import.Variant;

/**

*jacob操作MSword类

*@author

*/

publicclassWordBean{

//word文档

privateDispatchdoc;

//word运行程序对象

privateActiveXComponentword;

//所有word文档集合

privateDispatchdocuments;

//选定的范围或插入点

privateDispatchselection;

privatebooleansaveOnExit=true;

publicWordBean()throwsException{

if(word==null){

word=newActiveXComponent("Word.Application");

word.setProperty("Visible",newVariant(false));//不可见打开word

word.setProperty("AutomationSecurity",newVariant(3));//禁用宏

}

if(documents==null)

documents=word.getProperty("Documents").toDispatch();

}

/**

*设置退出时参数

*

*@paramsaveOnExit

*booleantrue-退出时保存文件,false-退出时不保存文件

*/

publicvoidsetSaveOnExit(booleansaveOnExit){

this.saveOnExit=saveOnExit;

}

/**

*创建一个新的word文档

*

*/

publicvoidcreateNewDocument(){

doc=Dispatch.call(documents,"Add").toDispatch();

selection=Dispatch.get(word,"Selection").toDispatch();

}

/**

*打开一个已存在的文档

*

*@paramdocPath

*/

publicvoidopenDocument(StringdocPath){

closeDocument();

doc=Dispatch.call(documents,"Open",docPath).toDispatch();

selection=Dispatch.get(word,"Selection").toDispatch();

}

/**

*只读打开一个保护文档,

*@paramdocPath-文件全名

*@parampwd-密码

*/

publicvoidopenDocumentOnlyRead(StringdocPath,Stringpwd)throwsException{

closeDocument();

//doc=Dispatch.invoke(documents,"Open",Dispatch.Method,

//newObject[]{docPath,newVariant(false),newVariant(true),newVariant(true),pwd},

//newint[1]).toDispatch();//打开word文件

doc=Dispatch.callN(documents,"Open",newObject[]{docPath,newVariant(false),

newVariant(true),newVariant(true),pwd,"",newVariant(false)}).toDispatch();

selection=Dispatch.get(word,"Selection").toDispatch();

}

publicvoidopenDocument(StringdocPath,Stringpwd)throwsException{

closeDocument();

doc=Dispatch.callN(documents,"Open",newObject[]{docPath,newVariant(false),

newVariant(false),newVariant(true),pwd}).toDispatch();

selection=Dispatch.get(word,"Selection").toDispatch();

}

/**

*把选定的内容或插入点向上移动

*

*@parampos

*移动的距离

*/

publicvoidmoveUp(intpos){

if(selection==null)

selection=Dispatch.get(word,"Selection").toDispatch();

for(inti=0;i

Dispatch.call(selection,"MoveUp");

}

/**

*把选定的内容或者插入点向下移动

*

*@parampos

*移动的距离

*/

publicvoidmoveDown(intpos){

if(selection==null)

selection=Dispatch.get(word,"Selection").toDispatch();

for(inti=0;i

Dispatch.call(selection,"MoveDown");

}

/**

*把选定的内容或者插入点向左移动

*

*@parampos

*移动的距离

*/

publicvoidmoveLeft(intpos){

if(selection==null)

selection=Dispatch.get(word,"Selection").toDispatch();

for(inti=0;i

Dispatch.call(selection,"MoveLeft");

}

}

/**

*把选定的内容或者插入点向右移动

*

*@parampos

*移动的距离

*/

publicvoidmoveRight(intpos){

if(selection==null)

selection=Dispatch.get(word,"Selection").toDispatch();

for(inti=0;i

Dispatch.call(selection,"MoveRight");

}

/**

*把插入点移动到文件首位置

*

*/

publicvoidmoveStart(){

if(selection==null)

selection=Dispatch.get(word,"Selection").toDispatch();

Dispatch.call(selection,"HomeKey",newVariant(6));

}

/**

*从选定内容或插入点开始查找文本

*

*@paramtoFindText

*要查找的文本

*@returnbooleantrue-查找到并选中该文本,false-未查找到文本

*/

@SuppressWarnings("static-access")

publicbooleanfind(StringtoFindText){

if(toFindText==null||toFindText.equals(""))

returnfalse;

//从selection所在位置开始查询

Dispatchfind=word.call(selection,"Find").toDispatch();

//设置要查找的内容

Dispatch.put(find,"Text",toFindText);

//向前查找

Dispatch.put(find,"Forward","True");

//设置格式

Dispatch.put(find,"Format","True");

//大小写匹配

Dispatch.put(find,"MatchCase","True");

//全字匹配

Dispatch.put(find,"MatchWholeWord","True");

//查找并选中

returnDispatch.call(find,"Execute").getBoolean();

}

/**

*把选定选定内容设定为替换文本

*

*@paramtoFindText

*查找字符串

*@paramnewText

*要替换的内容

*@return

*/

publicbooleanreplaceText(StringtoFindText,StringnewText){

if(!

find(toFindText))

returnfalse;

Dispatch.put(selection,"Text",newText);

returntrue;

}

/**

*全局替换文本

*

*@paramtoFindText

*查找字符串

*@paramnewText

*要替换的内容

*/

publicvoidreplaceAllText(StringtoFindText,StringnewText){

while(find(toFindText)){

Dispatch.put(selection,"Text",newText);

Dispatch.call(selection,"MoveRight");

}

}

/**

*在当前插入点插入字符串

*

*@paramnewText

*要插入的新字符串

*/

publicvoidinsertText(StringnewText){

Dispatch.put(selection,"Text",newText);

}

/**

*

*@paramtoFindText

*要查找的字符串

*@paramimagePath

*图片路径

*@return

*/

publicbooleanreplaceImage(StringtoFindText,StringimagePath){

if(!

find(toFindText))

returnfalse;

Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),

"AddPicture",imagePath);

returntrue;

}

/**

*全局替换图片

*

*@paramtoFindText

*查找字符串

*@paramimagePath

*图片路径

*/

publicvoidreplaceAllImage(StringtoFindText,StringimagePath){

while(find(toFindText)){

Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),

"AddPicture",imagePath);

Dispatch.call(selection,"MoveRight");

}

}

/**

*在当前插入点插入图片

*

*@paramimagePath

*图片路径

*/

publicvoidinsertImage(StringimagePath){

Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),

"AddPicture",imagePath);

}

/**

*合并单元格

*

*@paramtableIndex

*@paramfstCellRowIdx

*@paramfstCellColIdx

*@paramsecCellRowIdx

*@paramsecCellColIdx

*/

publicvoidmergeCell(inttableIndex,intfstCellRowIdx,intfstCellColIdx,

intsecCellRowIdx,intsecCellColIdx){

//所有表格

Dispatchtables=Dispatch.get(doc,"Tables").toDispatch();

//要填充的表格

Dispatchtable=Dispatch.call(tables,"Item",newVariant(tableIndex))

.toDispatch();

DispatchfstCell=Dispatch.call(table,"Cell",

newVariant(fstCellRowIdx),newVariant(fstCellColIdx))

.toDispatch();

DispatchsecCell=Dispatch.call(table,"Cell",

newVariant(secCellRowIdx),newVariant(secCellColIdx))

.toDispatch();

Dispatch.call(fstCell,"Merge",secCell);

}

/**

*在指定的单元格里填写数据

*

*@paramtableIndex

*@paramcellRowIdx

*@paramcellColIdx

*@paramtxt

*/

publicvoidputTxtToCell(inttableIndex,intcellRowIdx,intcellColIdx,

Stringtxt){

//所有表格

Dispatchtables=Dispatch.get(doc,"Tables").toDispatch();

//要填充的表格

Dispatchtable=Dispatch.call(tables,"Item",newVariant(tableIndex))

.toDispatch();

Dispatchcell=Dispatch.call(table,"Cell",newVariant(cellRowIdx),

newVariant(cellColIdx)).toDispatch();

Dispatch.call(cell,"Select");

Dispatch.put(selection,"Text",txt);

}

/**

*获得指定的单元格里数据

*

*@paramtableIndex

*@paramcellRowIdx

*@paramcellColIdx

*@return

*/

publicStringgetTxtFromCell(inttableIndex,intcellRowIdx,intcellColIdx){

//所有表格

Dispatchtables=Dispatch.get(doc,"Tables").toDispatch();

//要填充的表格

Dispatchtable=Dispatch.call(tables,"Item",newVariant(tableIndex))

.toDispatch();

Dispatchcell=Dispatch.call(table,"Cell",newVariant(cellRowIdx),

newVariant(cellColIdx)).toDispatch();

Dispatch.call(cell,"Select");

Stringret="";

ret=Dispatch.get(selection,"Text").toString();

ret=ret.substring(0,ret.length()-1);//去掉最后的回车符;

returnret;

}

/**

*在当前文档拷贝剪贴板数据

*@parampos

*/

publicvoidpasteExcelSheet(Stringpos){

moveStart();

if(this.find(pos)){

DispatchtextRange=Dispatch.get(selection,"Range").toDispatch();

Dispatch.call(textRange,"Paste");

}

}

/**

*在当前文档指定的位置拷贝表格

*

*@parampos

*当前文档指定的位置

*@paramtableIndex

*被拷贝的表格在word文档中所处的位置

*/

publicvoidcopyTable(Stringpos,inttableIndex){

//所有表格

Dispatchtables=Dispatch.get(doc,"Tables").toDispatch();

//要填充的表格

Dispatchtable=Dispatch.call(tables,"Item",newVariant(tableIndex))

.toDispatch();

Dispatchrange=Dispatch.get(table,"Range").toDispatch();

Dispatch.call(range,"Copy");

if(this.find(pos)){

DispatchtextRange=Dispatch.get(selection,"Range").toDispatch();

Dispatch.call(textRange,"Paste");

}

}

/**

*在当前文档指定的位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1