求一个JACOB调用DLL完整的示例,有心人贡献一下吧

解决方案 »

  1.   

    供参考
    http://www.cnjsp.org/view.jsp?column=2&id=793
      

  2.   

    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    import java.awt.*;
    import org.xml.sax.*;
    import com.jacob.activeX.*;
    import com.jacob.com.*;public class WordBean{  public static void main(String[] args) {
        //启动word,生成一个ActivexComponent对象
        ActiveXComponent app = new ActiveXComponent("Word.Application");
        //要转换的word文件
        String inFile = "D:\\test1.doc";
        //要报存的目标文件
        String tpFile = "D:\\test2.doc";
        boolean flag = false;
        String oldText = "1234";
        String newText = "test";
        boolean visible = false;
        String bookMarkKey = "BOOK";
        try {
          //设置word不可见
          app.setProperty("Visible", new Variant(visible));
          //log.info("设置word不可见成功!");
          System.out.println("设置word不可见成功!");      Dispatch docs = app.get(app,"Documents").toDispatch();//得到所有的WORD文档Active
          Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method
                                         , new Object[] {inFile, new Variant(false),
                                         new Variant(true)}
                                         , new int[1]).toDispatch(); //打开word文件
          Dispatch selection = app.getProperty("Selection").toDispatch();//selection就是doc
          //得到一个组件
          System.out.println("Selection");
          Dispatch find = app.call(selection, "Find").toDispatch();
          Dispatch tables = Dispatch.get(selection, "tables").toDispatch();
          int nTableAmount = Dispatch.get(tables, "count").toInt();
          System.out.println(nTableAmount);      //查找什么文本
          Dispatch.put(find, "Text", oldText);
          //替换文本
          Dispatch.call(find, "ClearFormatting");
          Dispatch.put(find, "Text", oldText);
          Dispatch.call(find, "Execute");
          Dispatch.put(selection, "Text", newText);
          System.out.println("replace");      //Dispatch.call      //把指定的值设置到指定的标签中去
          Dispatch activeDocument = app.getProperty("ActiveDocument").toDispatch();
          System.out.println("activedocument");
          Dispatch bookMarks = app.call(activeDocument, "Books").toDispatch();
          System.out.println(bookMarks.toString());
          System.out.println("books");
          boolean bookMarkExist1 = Dispatch.call(bookMarks, "Exists", bookMarkKey).
              toBoolean();
          if (bookMarkExist1 == true) {
            System.out.println("exists book!");
            Dispatch rangeItem = Dispatch.call(bookMarks, "Item", bookMarkKey).
                toDispatch();
            System.out.println("range item!");
            Dispatch range1 = Dispatch.call(rangeItem, "Range").toDispatch();
            System.out.println("range !");
            //取标签的值
            String bookMarkValue = Dispatch.get(range1, "Text").toString();
            bookMarkValue = "test";
            if (bookMarkValue != null) {
              Dispatch.put(range1, "Text",
                           new Variant(bookMarkValue));
            }      }
          else {
            System.out.println("not exists book!");
          }      //保存文件
          Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {tpFile,
                          new Variant(0)}
                          , new int[1]);
          //作为word格式保存到目标文件
          Variant f = new Variant(false);
          Dispatch.call(doc, "Close", f);
          flag = true;
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        finally {
          app.invoke("Quit", new Variant[] {});
        }
      }
    }