天天看点

Java com bridge 操作Word Excel Outlook.

                  JACOB是一个 JAVA到微软的COM接口的桥梁。使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象。如果你要对 MS Word、Excel 进行处理,JACOB 是一个好的选择。JACOB目前已经成为sourceforge(http://sourceforge.net/projects/jacob- project/)的一个开源项目,现在最新的版本是jacob-1.15-M4。

                  把jacob下载下来以后解压,里面有两个文件一个是dll另一个是jar文件。将jar文件放入C:/WINDOWS/system32下面,然后把jar文件加入你要用的工程里面就可以使用jacob了。

                 要使用jacob重要的是要理解VBA的用法,因为jacob其实就是VBA的一个java接口,它提供了一种方法让你可以调用VBA。所以在你要是VBA以前最好先去MSDN上面查看一下office 的reference 上面有一个文档如何创建,打开,保存关闭等功能。我在学习jacob用法的时候就是因为不懂VBA,在哪里胡乱的试,浪费了不少时间。最后还是在msdn上才找到了我要的东西。所以你要用jacob一定要先了解VBA。 当然还有一个简单一点的方法,打开一个EXCEl文件,选择View--Mcro-Recode macro,这样你就可以录制一段宏,录制的也就是你要用代码实现的效果,只是我们先用Excel手工实现。等你吧宏录制好了,点击编辑宏,你就可以根据这段宏来实现java代码了。

下面这段代码是从jacob官网上考过来的(http://danadler.com/jacob/)应该很容易理解的

import com.ms.com.*;
import com.ms.activeX.*;

public class DispatchTest
{
  public static void main(String[] args)
  {
    ActiveXComponent xl = new ActiveXComponent("Excel.Application");//使用excel程序,当让你也可以换成word。              Application              或者outlook.application
    Object xlo = xl.getObject();
    try {
      System.out.println("version="+xl.getProperty("Version"));
      System.out.println("version="+Dispatch.get(xlo, "Version"));
      xl.setProperty("Visible", new Variant(true));
      Object workbooks = xl.getProperty("Workbooks").toDispatch();//取得工作本
      Object workbook = Dispatch.get(workbooks,"Add").toDispatch();//添加一个工作本
      Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch();//添加一个sheet
      Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                  new Object[] {"A1"},
                                  new int[1]).toDispatch();///取值


 Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                  new Object[] {"A2"},
                                  new int[1]).toDispatch();
      Dispatch.put(a1, "Value", "123.456");
      Dispatch.put(a2, "Formula", "=A1*2");//公式
      System.out.println("a1 from excel:"+Dispatch.get(a1, "Value"));
      System.out.println("a2 from excel:"+Dispatch.get(a2, "Value"));
      Variant f = new Variant(false);
      Dispatch.call(workbook, "Close", f);//关闭,这里要小心,忘记关闭的话,会产生不少问题的。
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      xl.invoke("Quit", new Variant[] {});//退出excel.application.
    }
  }
}