Jacob解决Word文档的读写问题收藏

Jacob解决Word文档的读写问题收藏
Jacob是Java-COMBridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为:
http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368
配置:
(1)将解压包中的jacob.dll(x86常用,x64)拷到jdk安装目录下的jre\bin文件夹或windows安装路径下的WINDOWS\system32文件夹下
(2)将jacob.jar文件拷到classpath下即可
常见问题解决:
对于”java.lang.UnsatisfiedLinkError:C:\WINDOWS\system32\jacob-1.14.3-x86.dll:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正”这个问题,可以通过
重新下载Jacob的jar及dll文件(最好版本比现在的低,如1.11)解决
实例制作(主要功能:标题制作,表格制作,合并表格,替换文本,页眉页脚,书签处理):
importcom.jacob.activeX.ActiveXComponent;
importcom.jacob.com.Dispatch;
importcom.jacob.com.Variant;
publicclassWordOperate{
publicstaticvoidmain(Stringargs[]){
ActiveXComponentwordApp=newActiveXComponent("Word.Application");//启动word
//Setthevisiblepropertyasrequired.
Dispatch.put(wordApp,"Visible",newVariant(true));设置word可见
Dispatchdocs=wordApp.getProperty("Documents").toDispatch();
//StringinFile="d:\\test.doc";
//Dispatchdoc=Dispatch.invoke(docs,"Open",Dispatch.Method,
//newObject[]{inFile,newVariant(false),newVariant(false)},//参数3,false:可写,true:只读
//newint[1]).toDispatch();//打开文档
Dispatchdocument=Dispatch.call(docs,"Add").toDispatch();//createnewdocument
StringuserName=wordApp.getPropertyAsString("Username");//显示用户信息
System.out.println("用户名:"+userName);
//文档对齐,字体设置
Dispatchselection=Dispatch.get(wordApp,"Selection").toDispatch();
Dispatchalign=Dispatch.get(selection,"ParagraphFormat")
.toDispatch();//行列格式化需要的对象
Dispatchfont=Dispatch.get(selection,"Font").toDispatch();//字型格式化需要的对象
//标题处理
Dispatch.put(align,"Alignment","1");//1:置中2:靠右3:靠左
Dispatch.put(font,"Bold","1");//字型租体
Dispatch.put(font,"Color","1,0,0,0");//字型颜色红色
Dispatch.call(selection,"TypeText","Word文档处理");//写入标题内容
Dispatch.call(selection,"TypeParagraph");//空一行段落
Dispatch.put(align,"Alignment","3");//1:置中2:靠右3:靠左
Dispatch.put(selection,"Text","");
Dispatch.call(selection,"MoveDown");//光标标往下一行
//表格处理
Dispatchtables=Dispatch.get(document,"Tables").toDispatch();
Dispatchrange=Dispatch.get(selection,"Range").toDispatch();
Dispatchtable1=Dispatch.call(tables,"Add",range,newVariant(3),
newVariant(2),newVariant(1)).toDispatch();//设置行数,列数,表格外框宽度
//所有表格
VarianttableAmount=Dispatch.get(tables,"count");
System.out.println(tableAmount);
//要填充的表格
Dispatcht1=Dispatch.call(tables,"Item",newVariant(1))
.toDispatch();
Dispatcht1_row=Dispatch.get(t1,"rows").toDispatch();//所有行
intt1_rowNum=Dispatch.get(t1_row,"count").getInt();
Dispatch.call(Dispatch.get(t1,"columns").toDispatch(),"AutoFit");//自动调整
intt1_colNum=Dispatch.get(Dispatch.get(t1,"columns").toDispatch(),
"count").getInt();
System.out.println(t1_rowNum+""+t1_colNum);
for(inti=1;i<=t1_rowNum;i++){
for(intj=1;j<=t1_colNum;j++){
Dispatchcell=Dispatch.call(t1,"Cell",newVariant(i),
newVariant(j)).toDispatch();//行,列
Dispatch.call(cell,"Select");
Dispatch.put(selection,"Text","cell"+i+j);//写入word的内容
Dispatch.put(font,"Bold","0");//字型租体(1:租体0:取消租体)
Dispatch.put(font,"Color","1,1,1,0");//字型颜色
Dispatch.put(font,"Italic","1");//斜体1:斜体0:取消斜体
Dispatch.put(font,"Underline","1");//下划线
DispatchRange=Dispatch.get(cell,"Range").toDispatch();
StringcellContent=Dispatch.get(Range,"Text").toString();
System.out.println((cellContent.substring(0,cellContent
.length()-1)).trim());
}
Dispatch.call(selection,"MoveDown");//光标往下一行(才不会输入盖过上一输入位置)
}
//合并单元格
Dispatch.put(selection,"Text","");
Dispatch.call(selection,"MoveDown");//光标标往下一行
Dispatchrange2=Dispatch.get(selection,"Range").toDispatch();
Dispatchtable2=Dispatch.call(tables,"Add",range2,newVariant(8),
newVariant(4),newVariant(1)).toDispatch();//设置行数,列数,表格外框宽度
Dispatcht2=Dispatch.call(tables,"Item",newVariant(2))
.toDispatch();
DispatchbeginCell=Dispatch.call(t2,"Cell",newVariant(1),
newVariant(1)).toDispatch();
DispatchendCell=Dispatch.call(t2,"Cell",newVariant(4),
newVariant(4)).toDispatch();
Dispatch.call(beginCell,"Merge",endCell);
for(introw=1;row<=Dispatch.get(
Dispatch.get(t2,"rows").toDispatch(),"count").getInt();row++){
for(intcol=1;col<=Dispatch.get(
Dispatch.get(t2,"columns").toDispatch(),"count").getInt();col++){
if(row==1){
Dispatchcell=Dispatch.call(t2,"Cell",newVariant(1),
newVariant(1)).toDispatch();//行,列
Dispatch.call(cell,"Select");
Dispatch.put(font,"Color","1,1,1,0");//字型颜色
Dispatch.put(selection,"Text","mergeCell!");
}else{
Dispatchcell=Dispatch.call(t2,"Cell",newVariant(row),
newVariant(col)).toDispatch();//行,列
Dispatch.call(cell,"Select");
Dispatch.put(font,"Color","1,1,1,0");//字型颜色
Dispatch.put(selection,"Text","cell"+row+col);
}
}
Dispatch.call(selection,"MoveDown");
}
//Dispatch.call(selection,"MoveRight",newVariant(1),newVariant(1));//取消选择
//Objectcontent=Dispatch.get(doc,"Content").toDispatch();
//Word文档内容查找及替换
Dispatch.call(selection,"TypeParagraph");//空一行段落
Dispatch.put(align,"Alignment","3");//1:置中2:靠右3:靠左
Dispatch.put(font,"Color",0);
Dispatch.put(selection,"Text","欢迎,Hello,world!");
Dispatch.call(selection,"HomeKey",newVariant(6));//移到开头
Dispatchfind=Dispatch.call(selection,"Find").toDispatch();//获得Find组件
Dispatch.put(find,"Text","hello");//查找字符串"hello"
Dispatch.put(find,"Forward","True");//向前查找
//Dispatch.put(find,"Format","True");//设置格式
Dispatch.put(find,"MatchCase","false");//大小写匹配
Dispatch.put(find,"MatchWholeWord","True");//全字匹配
Dispatch.call(find,"Execute");//执行查询
Dispatch.put(selection,"Text","你好");//替换为"你好"
//使用方法传入的参数parameter调用word文档中的MyWordMacro宏//
//Dispatch.call(document,macroName,parameter);
//Dispatch.invoke(document,macroName,Dispatch.Method,parameter,newint[1]);
//页眉,页脚处理
DispatchActiveWindow=wordApp.getProperty("ActiveWindow")
.toDispatch();
DispatchActivePane=Dispatch.get(ActiveWindow,"ActivePane")
.toDispatch();
DispatchView=Dispatch.get(ActivePane,"View").toDispatch();
Dispatch.put(View,"SeekView","9");//9是设置页眉
Dispatch.put(align,"Alignment","1");//置中
Dispatch.put(selection,"Text","这里是页眉");//初始化时间
Dispatch.put(View,"SeekView","10");//10是设置页脚
Dispatch.put(align,"Alignment","2");//靠右
Dispatch.put(selection,"Text","这里是页脚");//初始化从1开始
//书签处理(打开文档时处理)
//DispatchactiveDocument=wordApp.getProperty("ActiveDocument").toDispatch();
DispatchbookMarks=Dispatch.call(document,"Bookmarks").toDispatch();
booleanisExist=Dispatch.call(bookMarks,"Exists","bookMark1")
.getBoolean();
if(isExist==true){
DispatchrangeItem1=Dispatch.call(bookMarks,"Item","bookMark1")
.toDispatch();
Dispatchrange1=Dispatch.call(rangeItem1,"Range").toDispatch();
Dispatch.put(range1,"Text",newVariant("当前是书签1的文本信息!"));
StringbookMark1Value=Dispatch.get(range1,"Text").toString();
System.out.println(bookMark1Value);
}else{
System.out.println("当前书签不存在,重新建立!");
Dispatch.call(bookMarks,"Add","bookMark1",selection);
DispatchrangeItem1=Dispatch.call(bookMarks,"Item","bookMark1")
.toDispatch();
Dispatchrange1=Dispatch.call(rangeItem1,"Range").toDispatch();
Dispatch.put(range1,"Text",newVariant("当前是书签1的文本信息!"));
StringbookMark1Value=Dispatch.get(range1,"Text").toString();
System.out.println(bookMark1Value);
}
//保存操作
Dispatch.call(document,"SaveAs","D:/wordOperate.doc");
//Dispatch.invoke((Dispatch)doc,"SaveAs",Dispatch.Method,newObject[]{htmlPath,newVariant(8)},newint[1]);//生成html文件
//0=wdDoNotSaveChanges
//-1=wdSaveChanges
//-2=wdPromptToSaveChanges
//Dispatch.call(document,"Close",newVariant(0));
worddoc.olefunction("protect",2,true,"");
DispatchbookMarks=wordApp.call(docs,"Bookmarks").toDispatch();
System.out.println("bookmarks"+bookMarks.getProgramId());
Dispatch.call(doc,"Save");//保存
Dispatch.call(doc,"Close",newVariant(true));
wordApp.invoke("Quit",newVariant[]{});
//wordApp.safeRelease();//Finalizerscallthismethod
}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值