java操作word_Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包

这篇博客介绍了如何使用Java的JACOB库和POI库来操作Word文档,包括创建新文档、打开已有文档、设置密码保护、打印预览等操作。此外,还提供了各种实用方法,如移动选定内容、查找和替换文本、插入图片等,展示了Java在处理Word文档的强大功能。
摘要由CSDN通过智能技术生成

importcom.jacob.activeX.ActiveXComponent;importcom.jacob.com.Dispatch;importcom.jacob.com.Variant;public classWordUtils {//word运行程序对象

privateActiveXComponent word;//所有word文档集合

privateDispatch documents;//word文档

privateDispatch doc;//选定的范围或插入点

privateDispatch selection;//保存退出

private booleansaveOnExit;public WordUtils(booleanvisible) {

word= new ActiveXComponent("Word.Application");

word.setProperty("Visible", newVariant(visible));

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

}/*** 设置退出时参数

*

*@paramsaveOnExit

* boolean true-退出时保存文件,false-退出时不保存文件*/

public void setSaveOnExit(booleansaveOnExit) {this.saveOnExit =saveOnExit;

}/*** 创建一个新的word文档*/

public voidcreateNewDocument() {

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

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

}/*** 打开一个已经存在的word文档

*

*@paramdocPath*/

public voidopenDocument(String docPath) {

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

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

}/*** 打开一个有密码保护的word文档

*@paramdocPath

*@parampassword*/

public voidopenDocument(String docPath, String password) {

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

unProtect(password);

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

}/*** 去掉密码保护

*@parampassword*/

public voidunProtect(String password){try{

String protectionType= Dispatch.get(doc, "ProtectionType").toString();if(!"-1".equals(protectionType)){

Dispatch.call(doc,"Unprotect", password);

}

}catch(Exception e){

e.printStackTrace();

}

}/*** 添加密码保护

*@parampassword*/

public voidprotect(String password){

String protectionType= Dispatch.get(doc, "ProtectionType").toString();if("-1".equals(protectionType)){

Dispatch.call(doc,"Protect",new Object[]{new Variant(3), new Variant(true), password});

}

}/*** 显示审阅的最终状态*/

public voidshowFinalState(){

Dispatch.call(doc,"AcceptAllRevisionsShown");

}/*** 打印预览:*/

public voidprintpreview() {

Dispatch.call(doc,"PrintPreView");

}/*** 打印*/

public voidprint(){

Dispatch.call(doc,"PrintOut");

}public voidprint(String printerName) {

word.setProperty("ActivePrinter", newVariant(printerName));

print();

}/*** 指定打印机名称和打印输出工作名称

*@paramprinterName

*@paramoutputName*/

public voidprint(String printerName, String outputName){

word.setProperty("ActivePrinter", newVariant(printerName));

Dispatch.call(doc,"PrintOut", new Variant[]{new Variant(false), new Variant(false), new Variant(0), newVariant(outputName)});

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

*

*@parampos*/

public void moveUp(intpos) {

move("MoveUp", pos);

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

*

*@parampos*/

public void moveDown(intpos) {

move("MoveDown", pos);

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

*

*@parampos*/

public void moveLeft(intpos) {

move("MoveLeft", pos);

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

*

*@parampos*/

public void moveRight(intpos) {

move("MoveRight", pos);

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

public voidmoveRight() {

Dispatch.call(getSelection(),"MoveRight");

}/*** 把选定的内容或者插入点向指定的方向移动

*@paramactionName

*@parampos*/

private void move(String actionName, intpos) {for (int i = 0; i < pos; i++)

Dispatch.call(getSelection(), actionName);

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

public voidmoveStart(){

Dispatch.call(getSelection(),"HomeKey", new Variant(6));

}/*** 把插入点移动到文件末尾位置*/

public voidmoveEnd(){

Dispatch.call(getSelection(),"EndKey", new Variant(6));

}/*** 插入换页符*/

public voidnewPage(){

Dispatch.call(getSelection(),"InsertBreak");

}public voidnextPage(){

moveEnd();

moveDown(1);

}public intgetPageCount(){

Dispatch selection= Dispatch.get(word, "Selection").toDispatch();return Dispatch.call(selection,"information", new Variant(4)).getInt();

}/*** 获取当前的选定的内容或者插入点

*@return当前的选定的内容或者插入点*/

publicDispatch getSelection(){if (selection == null)

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

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

*@paramfindText 要查找的文本

*@returnboolean true-查找到并选中该文本,false-未查找到文本*/

public booleanfind(String findText){if(findText == null || findText.equals("")){return false;

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

Dispatch find = Dispatch.call(getSelection(), "Find").toDispatch();//设置要查找的内容

Dispatch.put(find, "Text", findText);//向前查找

Dispatch.put(find, "Forward", "True");//设置格式

Dispatch.put(find, "Format", "True");//大小写匹配

Dispatch.put(find, "MatchCase", "True");//全字匹配

Dispatch.put(find, "MatchWholeWord", "True");//查找并选中

return Dispatch.call(find, "Execute").getBoolean();

}/*** 查找并替换文字

*@paramfindText

*@paramnewText

*@returnboolean true-查找到并替换该文本,false-未查找到文本*/

public booleanreplaceText(String findText, String newText){

moveStart();if (!find(findText))return false;

Dispatch.put(getSelection(),"Text", newText);return true;

}/*** 进入页眉视图*/

public voidheaderView(){//取得活动窗体对象

Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象

Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象

Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();

Dispatch.put(view,"SeekView", "9");

}/*** 进入页脚视图*/

public voidfooterView(){//取得活动窗体对象

Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象

Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象

Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();

Dispatch.put(view,"SeekView", "10");

}/*** 进入普通视图*/

public voidpageView(){//取得活动窗体对象

Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象

Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象

Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();

Dispatch.put(view,"SeekView", new Variant(0));//普通视图

}/*** 全局替换文本

*@paramfindText

*@paramnewText*/

public voidreplaceAllText(String findText, String newText){int count =getPageCount();for(int i = 0; i < count; i++){

headerView();while(find(findText)){

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

moveEnd();

}

footerView();while(find(findText)){

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

moveStart();

}

pageView();

moveStart();while(find(findText)){

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

moveStart();

}

nextPage();

}

}/*** 全局替换文本

*@paramfindText

*@paramnewText*/

public void replaceAllText(String findText, String newText, String fontName, intsize){/****插入页眉页脚*****/

//取得活动窗体对象

Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象

Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象

Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();/****设置页眉*****/Dispatch.put(view,"SeekView", "9");while(find(findText)){

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

moveStart();

}/****设置页脚*****/Dispatch.put(view,"SeekView", "10");while(find(findText)){

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

moveStart();

}

Dispatch.put(view,"SeekView", new Variant(0));//恢复视图

moveStart();while(find(findText)){

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

putFontSize(getSelection(), fontName, size);

moveStart();

}

}/*** 设置选中或当前插入点的字体

*@paramselection

*@paramfontName

*@paramsize*/

public void putFontSize(Dispatch selection, String fontName, intsize){

Dispatch font= Dispatch.get(selection, "Font").toDispatch();

Dispatch.put(font,"Name", newVariant(fontName));

Dispatch.put(font,"Size", newVariant(size));

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

public voidinsertText(String text){

Dispatch.put(getSelection(),"Text", text);

}/*** 将指定的文本替换成图片

*@paramfindText

*@paramimagePath

*@returnboolean true-查找到并替换该文本,false-未查找到文本*/

public boolean replaceImage(String findText, String imagePath, int width, intheight){

moveStart();if (!find(findText))return false;

Dispatch picture= Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();

Dispatch.call(picture,"Select");

Dispatch.put(picture,"Width", newVariant(width));

Dispatch.put(picture,"Height", newVariant(height));

moveRight();return true;

}/*** 全局将指定的文本替换成图片

*@paramfindText

*@paramimagePath*/

public void replaceAllImage(String findText, String imagePath, int width, intheight){

moveStart();while(find(findText)){

Dispatch picture= Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();

Dispatch.call(picture,"Select");

Dispatch.put(picture,"Width", newVariant(width));

Dispatch.put(picture,"Height", newVariant(height));

moveStart();

}

}/*** 在当前插入点中插入图片

*@paramimagePath*/

public void insertImage(String imagePath, int width, intheight){

Dispatch picture= Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();

Dispatch.call(picture,"Select");

Dispatch.put(picture,"Width", newVariant(width));

Dispatch.put(picture,"Height", newVariant(height));

moveRight();

}/*** 在当前插入点中插入图片

*@paramimagePath*/

public voidinsertImage(String imagePath){

Dispatch.call(Dispatch.get(getSelection(),"InLineShapes").toDispatch(), "AddPicture", imagePath);

}/*** 获取书签的位置

*@parambookmarkName

*@return书签的位置*/

publicDispatch getBookmark(String bookmarkName){try{

Dispatch bookmark= Dispatch.call(this.doc, "Bookmarks", bookmarkName).toDispatch();return Dispatch.get(bookmark, "Range").toDispatch();

}catch(Exception e){

e.printStackTrace();

}return null;

}/*** 在指定的书签位置插入图片

*@parambookmarkName

*@paramimagePath*/

public voidinsertImageAtBookmark(String bookmarkName, String imagePath){

Dispatch dispatch=getBookmark(bookmarkName);if(dispatch != null)

Dispatch.call(Dispatch.get(dispatch,"InLineShapes").toDispatch(), "AddPicture", imagePath);

}/*** 在指定的书签位置插入图片

*@parambookmarkName

*@paramimagePath

*@paramwidth

*@paramheight*/

public void insertImageAtBookmark(String bookmarkName, String imagePath, int width, intheight){

Dispatch dispatch=getBookmark(bookmarkName);if(dispatch != null){

Dispatch picture= Dispatch.call(Dispatch.get(dispatch, "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();

Dispatch.call(picture,"Select");

Dispatch.put(picture,"Width", newVariant(width));

Dispatch.put(picture,"Height", newVariant(height));

}

}/*** 在指定的书签位置插入文本

*@parambookmarkName

*@paramtext*/

public voidinsertAtBookmark(String bookmarkName, String text){

Dispatch dispatch=getBookmark(bookmarkName);if(dispatch != null)

Dispatch.put(dispatch,"Text", text);

}/*** 文档另存为

*@paramsavePath*/

public voidsaveAs(String savePath){

Dispatch.call(doc,"SaveAs", savePath);

}/*** 文档另存为PDF

*

注意:此操作要求word是2007版本或以上版本且装有加载项:Microsoft Save as PDF 或 XPS

*@paramsavePath*/

public voidsaveAsPdf(String savePath){

Dispatch.call(doc,"SaveAs", new Variant(17));

}/*** 保存文档

*@paramsavePath*/

public voidsave(String savePath){

Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs", savePath);

}/*** 关闭word文档*/

public voidcloseDocument(){if (doc != null) {

Dispatch.call(doc,"Close", newVariant(saveOnExit));

doc= null;

}

}public voidexit(){

word.invoke("Quit", new Variant[0]);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值