java2Word中关闭不了WINWORD进程问题的解决

package com.eeplat.action.zidingyi;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

   public class MSWordManager {
          // word文档
           private Dispatch doc;

               // word运行程序对象
           private ActiveXComponent word;

                   // 所有word文档集合
           private Dispatch documents;

         // 选定的范围或插入点
           private Dispatch selection;

           private boolean saveOnExit = true;
                    /** *//**
         *    
         * @param visible 为true表示word应用程序可见
         */
          
           public MSWordManager(boolean visible){
            if(word== null){
             word = new ActiveXComponent("Word.Application");
             word.setProperty("Visible", new Variant(visible));
            }
            if(documents == null){
            
             documents = word.getProperty("Documents").toDispatch();
            }
           
           }
         /*
         * 设置退出时参数
         *    
         * @param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件
         */
      
       public void setSaveOnExit(boolean saveOnExit){
       
        this.saveOnExit = saveOnExit;
       }
 

 /*
    * 创建一个新的word文档
         *    
         */
       public void createNewDocument(){

        doc = Dispatch.call(documents,"Add").toDispatch();
        selection = Dispatch.get(word,"Selection").toDispatch();
       }
  


             /*
         * 打开一个已存在的文档
         *    
         * @param docPath
         */
       public void openDocument(String docPath){
        closeDocument();
        doc = Dispatch.call(documents,"Open", docPath).toDispatch();
        selection = Dispatch.get(word, "Selection").toDispatch();
       
       }
 

                /** *//**
         * 把选定的内容或插入点向上移动
         *    
         * @param pos 移动的距离
         */
                public void moveUp(int pos){
                 if(selection == null){ 
                  selection = Dispatch.get(word, "Selection").toDispatch();
                      for(int i = 0 ;i<pos;i++){
                       Dispatch.call(selection,"MoveUp");
                      }
                    }
                      }
        

                   /*
         * 把选定的内容或者插入点向下移动
         *    
         * @param pos 移动的距离
         */
          public void moveDown(int pos){
           if(selection == null){
             selection = Dispatch.get(word, "Selection").toDispatch();
             for(int i =0;i<pos;i++){
             
              Dispatch.call(selection,"MoveDown");
             }
           
           }
          
          
          }
        

 

  /** *//**
         * 从选定内容或插入点开始查找文本
         *    
         * @param toFindText 要查找的文本
         * @return boolean true-查找到并选中该文本,false-未查找到文本
         */
          public boolean find(String toFindText){
           if(toFindText == null|| toFindText.equals("")){
            return false;
           }
           //从selection 所在位置开始查询
           Dispatch find = 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");
           return Dispatch.call(find, "Execute").getBoolean();           
          }


  /** *//**
         * 把选定选定内容设定为替换文本
         *    
         * @param toFindText 查找字符串
         * @param newText 要替换的内容
         * @return
         */
  public boolean replaceText(String toFindText,String newText){
   if(!find(toFindText)){
    return false;
   }
   Dispatch.put(selection,"Text", newText);
   return true;
  }


  /** *//**
         * 全局替换文本
         *    
         * @param toFindText 查找字符串
         * @param newText 要替换的内容
         */
  public void replaceAllText(String toFindText,String newText){
   while(find(toFindText)){
   
    Dispatch.put(selection, "Text", newText);
    Dispatch.call(selection,"MoveRight");
   }
  
 
  }

   /** *//**
         * 在当前插入点插入字符串
         *    
         * @param newText 要插入的新字符串
         */
  public void insertText(String newText){
   Dispatch.put(selection, "Text", newText);
  
  }


    /** *//**
         *    
         * @param toFindText 要查找的字符串
         * @param imagePath 图片路径
         * @return
         */
 public boolean replaceImage(String toFindText,String imagePath){
   if(!find(toFindText)){
    return false;
   }
  Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(), "AddPicture",imagePath);
  return true;
 }


                /*
         * 全局替换图片
         *    
         * @param toFindText 查找字符串
         * @param imagePath 图片路径
         */
 public void replaceAllImage(String toFindText,String imagePath){
   while(find(toFindText)){
    Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture",imagePath);
     Dispatch.call(selection,"MoveRight");
      }
   }
 

  /** *//**
         * 在当前插入点插入图片
         *    
         * @param imagePath 图片路径
         */
 
   public void insertImage(String imagePath){
   
    Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(), "AddPicture",imagePath);
   }

  /** *//**
         * 在当前文档指定的位置拷贝来自另一个文档中的段落
         *    
         * @param anotherDocPath 另一个文档的磁盘路径
         * @param tableIndex 被拷贝的段落在另一格文档中的序号(从1开始)
         * @param pos 当前文档指定的位置
         */
  public void copyParagraphFromAnotherDoc(String anotherDocPath,
  int paragraphIndex, String pos) {
  Dispatch doc2 = null;
 try {
  doc2 = Dispatch.call(documents, "Open", anotherDocPath) .toDispatch();
 Dispatch paragraphs = Dispatch.get(doc2, "Paragraphs").toDispatch();

 Dispatch paragraph = Dispatch.call(paragraphs, "Item",  new Variant(paragraphIndex)).toDispatch();
 Dispatch range = Dispatch.get(paragraph, "Range").toDispatch();
 Dispatch.call(range, "Copy");
 if (this.find(pos)) {
 Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
Dispatch.call(textRange, "Paste");  }

} catch (Exception e) {
e.printStackTrace();
} finally {
 if (doc2 != null) {
Dispatch.call(doc2, "Close", new Variant(saveOnExit));
 doc2 = null; }
 }
}

 

  public void closeDocument(){
   if(doc != null){
    Dispatch.call(doc, "Save");
    Dispatch.call(doc, "Close",new Variant(saveOnExit));
    doc = null;
   } 
  }

 }

 

Java调用Java2word的时候需要自己搞个方法关闭WinWOrd

public void closeWinWord(){

   if (word != null) {
   Dispatch.call(word, "Quit");
   word = null;
  }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值