`

jacob资料

    博客分类:
  • java
阅读更多

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

因为在项目中用到了这个技术,但是在网上没有查到很符合题目的文章,经过我自己的探索,总结写出了这篇文章。

这篇文章可能不能完全满足你的要求,你也可以按照我的探索方法进行探索:参阅VBA操作Office的组件的书籍,然后参考下面的Tip完成需要的功能。文章最后附完整的测试代码。

生成WORD文档的简单讲解:

1. 初始化com的线程,非常重要,否则第二次创建com对象的时候会出现can’t co-create object异常 (参见jacob的帮助文档),完成操作com组件后要调用 realease方法
ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法

2. 初始化word应用程序,新建一个空白文档,取得文档内容对象//Instantiate objWord //Declare word object
ActiveXComponent objWord = new ActiveXComponent("Word.Application");

//Assign a local word object
Dispatch wordObject = (Dispatch) objWord.getObject();

//Create a Dispatch Parameter to show the document that is opened
Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// new Variant(true)表示word应用程序可见
Tip:设置一个对象的属性的时候,利用Dispatch的put方法,给属性赋值。上面这行语句相当于vb的 wordObject.Visible = true 语句

//Instantiate the Documents Property
Dispatch documents = objWord.getProperty("Documents").toDispatch(); //documents表示word的所有文档窗口,(word是多文档应用程序)

//Add a new word document, Current Active Document
Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档
Tip:调用一个对象的方法的时候,利用Dispatch的call方法,上面的语句相当于vb的document = documents.Add() 语句。

Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容
Tip:取得一个对象的成员变量(属性)时利用Dispatch的get方法,上面的语句相当于vb的wordContent = document.Content语句

3. 取得word文档的内容后,可以对其内容进行操作
Dispatch.call(wordContent, "InsertAfter", "这里是一个段落的内容");//插入一个段落

4. 设置刚插入的段落的文字格式
Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs").toDispatch(); // 所有段落
int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数

// 找到刚输入的段落,设置格式
Dispatch lastParagraph = Dispatch.call(paragraphs, "Item",
new Variant(paragraphCount)).
toDispatch(); // 最后一段
Dispatch lastParagraphRange = Dispatch.get(lastParagraph, "Range").
toDispatch();
Dispatch font = Dispatch.get(lastParagraphRange, "Font").toDispatch();
Dispatch.put(font, "Bold", new Variant(true)); // 设置为黑体
Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体
Dispatch.put(font, "Name", new Variant("宋体")); //
Dispatch.put(font, "Size", new Variant(12)); //小四
注意:如果想插入一个新的空白行,也需要设置段落的文字格式,否则新插入行的文字格式会于刚插入的段落的格式相同。

5. 将当前文档保存
Dispatch.call(document, "SaveAs", new Variant("C:
abc.doc")); // 保存一个新文档

6. 释放COM线程
ComThread.Release();//释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理

完整测试代码:(StudyJacob.java 附件中有本文章和java源文件)
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.jacob.com.ComThread;

public class StudyJacob {

public static void main(String[] args) {
ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法

//Instantiate objWord //Declare word object
ActiveXComponent objWord = new ActiveXComponent("Word.Application");

//Assign a local word object
Dispatch wordObject = (Dispatch) objWord.getObject();

//Create a Dispatch Parameter to show the document that is opened
Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// new Variant(true)表示word应用程序可见

//Instantiate the Documents Property
Dispatch documents = objWord.getProperty("Documents").toDispatch(); //documents表示word的所有文档窗口,(word是多文档应用程序)

//Add a new word document, Current Active Document
Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档

Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容

Dispatch.call(wordContent, "InsertAfter", "这里是一个段落的内容");//插入一个段落

Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs").toDispatch(); // 所有段落
int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数

// 找到刚输入的段落,设置格式
Dispatch lastParagraph = Dispatch.call(paragraphs, "Item",
new Variant(paragraphCount)).
toDispatch(); // 最后一段
Dispatch lastParagraphRange = Dispatch.get(lastParagraph, "Range").
toDispatch();
Dispatch font = Dispatch.get(lastParagraphRange, "Font").toDispatch();
Dispatch.put(font, "Bold", new Variant(true)); // 设置为黑体
Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体
Dispatch.put(font, "Name", new Variant("宋体")); //
Dispatch.put(font, "Size", new Variant(12)); //小四

Dispatch.call(document, "SaveAs", new Variant("C:
abc.doc")); // 保存一个新文档
ComThread.Release();//释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理
}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

如果你想写一个JAVA代码,其中需要调用JACOB提供的功能,而你还是新手,也许篇文章会大大降低你的花费时间。

我将一个关于JACOB的代码分成下面几个步骤:

1) ActiveXComponent ax = new ActiveXComponent("a1");//构建ActiveX组件实例

其中的a1的值和你需要调用的ActiveX控件有关 MS控件名
a1的值

InternetExplorer
InternetExplorer.Application

Excel
Excel.Application

Word
Word.Application

Powerpoint
Powerpoint.Application

vb/java Script
ScriptControl

windows media Player
WMPlayer.OCX

Outlook
Outlook.Application

Visio
Visio.Application

DAO
DAO.PrivateDBEngine.35

MultiFace
MultiFace.Face

2) Dispatch ds = ax.getObject(). toDispatch();//获取Dispatch对象,我们可以把每个Dispatch对象看成是对Activex控件的一个操作,这一步是获得该ActiveX控件的控制权。
(注: 中提到过Variant类,这里的ax.getObject()便是获得该对象,我们将其转化为任何对象(类型))

3) Dispatch ds1 = Dispatch.get(ds, "a2").toDispatch(); //获取该ActiveX对象数据结构中的a2属性

4) Dispatch d2 = Dispatch.invoke(ds1, "a3", a4, a5, a6).toDispatch(); //功能调用,对ActiveX对象ds1的a3属性执行a4(Dispatch.Put\Dispatch.Get等)操作,执行后a3的值为a5,a6为错误参数码常定义为new int[1],
(注:call、get和put方法都是通过该方法实现的)

5) Dispatch ds2 = Dispatch.put(ds, "a7","a8").toDispatch();//将ActiveX对象ds的属性a4的值设置为a5,该方法返回类型同get一样

6) Dispatch ds3 = Dispatch.call(ds1, "a9", a10);//该方法和get方法非常类似,他是把a9属性赋值给a10

Ok其他的方法我觉得很容易理解,这里就不再做描述了。

下面是一个关于excel的代码,也许对您的进一步自学,会有好处


import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class ExcelDispatchTest {

public static void main(String[] args) {
ComThread.InitSTA();

ActiveXComponent xl = new ActiveXComponent("Excel.Application");
try {
System.out.println("version=" + xl.getProperty("Version"));
System.out.println("version=" + Dispatch.get(xl, "Version"));
Dispatch.put(xl, "Visible", new Variant(true));
Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();
Dispatch workbook = Dispatch.get(workbooks, "Add").toDispatch();
Dispatch sheet = Dispatch.get(workbook, "ActiveSheet").toDispatch();
Dispatch a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
new Object[] { "A1" }, new int[1]).toDispatch();
Dispatch 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[] {});
ComThread.Release();
}
}

 

分享到:
评论

相关推荐

    jacob操作word资料

    本篇文章将深入探讨如何使用Jacob来操作Word资料。 一、Jacob库的安装与配置 首先,你需要下载Jacob的JAR文件,将其添加到你的项目类路径中。如果是Maven项目,可以在pom.xml文件中添加对应的依赖。然后,确保你的...

    jacob开发文档jacob

    这个开发文档及其示例资源是开发者理解和应用Jacob的重要参考资料。 **Jacob的核心功能** 1. **COM接口封装**:Jacob使得Java程序能够调用COM组件,这意味着你可以通过Java来操作Microsoft Word、Excel等应用程序...

    Jacob1.9.zip

    官方网站通常会提供最新的版本、API文档、示例代码以及常见问题解答,这对于开发者来说是非常有价值的参考资料。 4. 使用Jacob库的步骤: - 引入库:在Java项目中,需要将Jacob的jar文件添加到类路径中。 - 加载...

    jacob-1.17-M2

    除了DLL文件,Jacob-1.17-M2可能还包含了一些文档资料,这些文档通常会提供详细的API参考、示例代码以及使用指南,帮助开发者更好地理解和使用Jacob。这些文档对于初学者来说尤其重要,因为Jacob的使用涉及到一些COM...

    使用jacob转pdf资料

    "使用jacob转pdf资料"这个主题涉及到一个名为jacob的Java库,它允许开发者通过Java代码来调用Microsoft Office或WPS组件,实现各种文档格式之间的转换。 首先,jacob(Java COM Bridge)是一个开源的Java库,它的...

    jacob-1.18-M2(含Jacob.jar包以及Jacob.dll文件 说明文档API等)集合

    说明文档和API资料是学习和使用Jacob的重要参考资料。它们详细解释了Jacob的使用方法、类库结构以及各种接口的功能,帮助开发者快速理解和应用。API文档通常会列出每个类和方法的详细描述,包括参数、返回值、异常...

    jacob-1.18含Jacob.jar包以及Jacob.dll文件 说明文档API

    尽管目前只有英文版,但它是学习和使用Jacob的重要参考资料。 使用Jacob时,开发者可以执行以下操作: - **创建和初始化COM对象**:通过Jacob提供的Java类,可以实例化并初始化COM对象,如Excel、Word等Microsoft ...

    jacob-1.14.3-x64及maven.zip

    综上所述,这个压缩包提供了使用Java和Jacob库将Word文档转换为PDF的解决方案,结合Maven进行项目管理,并附带了DLL处理工具和相关资料。开发者需要了解Java、Jacob、Maven以及COM组件的基本概念,以便成功地在项目...

    jacob excel资料.doc

    ### Jacob与Excel集成知识点 #### 一、Jacob简介 Jacob(Java-COM Bridge)是一个开源的Java库,它允许Java应用程序调用COM组件。通过Jacob,开发者能够利用Java语言的强大功能来操作Windows平台上的各种COM对象,...

    jacob-1.18.zip

    这些资源通常包括API文档、示例代码、安装指南等,对于初次接触Jacob的开发者来说,是非常有价值的参考资料。 总结起来,Jacob-1.18是一个强大的工具,使得Java开发者能够利用Windows的COM组件扩展其应用程序的功能...

    jacob-1.18.rar

    对于初学者而言,这些文档是快速理解和使用Jacob的重要参考资料。 4. **使用示例** - 创建COM对象:通过`com.jacob.com.ComThread.init Jacob()`初始化线程,然后使用`com.jacob.activeX.ActiveXComponent`类创建...

    jacob操作实例+lib

    通过学习这些资料,开发者可以掌握如何在Java中使用Jacob库来高效地处理Microsoft Office文档,包括读写、转换和生成HTML,这对于自动化办公流程或构建基于Web的文档处理系统非常有帮助。此外,对于不熟悉Jacob的...

    jacob-1.14.3.jar 包 ,内含有相关资料以及常见错误解决方案 !

    2. 如果你的系统是64位的,可能还需要添加对应的dll文件(例如,jacob.dll)到系统路径,因为Jacob在运行时需要这个本地库。 3. 创建`DynamicDispatchObject`实例,这通常是COM对象的根,比如`ActiveXObject`。 4. ...

    jacob-1.18的 jar 和 dll(x62、x32)文件打包下载

    Jacob是Java和COM之间的一个桥梁,它允许Java代码与COM组件进行交互,使得开发者能够利用Java编程...它包含了运行和使用Jacob所需的全部组件,以及可能的文档资料,能够帮助开发者快速上手并成功集成到他们的项目中。

    jacob.jar、API、用法

    这个文档是开发者使用Jacob进行开发的重要参考资料,应当仔细阅读。 **五、示例应用** 例如,使用Jacob创建一个新的Excel工作簿并保存的Java代码示例: ```java import com.jacob.activeX.ActiveXComponent; ...

    jacob-1.19(包含jacob 32位,64位jar包以及文档 )

    这个压缩包包含了Jacob的32位和64位版本的jar文件,以及相关的文档资料,使得开发人员可以在Java应用中无缝地利用MS Office的功能,如Word、Excel和PowerPoint,进行文件转换和其他自动化任务。 **主要功能** 1. *...

    jacob各个版本集合

    描述中的“javadoc”是指Jacob的API文档,它是Java开发者的重要参考资料,提供了详细的类、方法和接口说明,帮助开发者理解和使用Jacob的功能。"dll"文件是Windows下的动态链接库,它包含了Jacob运行时所需的COM交互...

    jacob-1.18

    API文档是开发者的重要参考资料,它详细列出了Jacob的所有类、方法和属性,以及如何使用它们来实现特定功能。有了这份文档,开发者可以更方便地学习和掌握Jacob的使用。 **4. 使用Jacob的步骤** 使用Jacob时,通常...

    Jacob用户指南中文版.chm

    Jacob,全称Java-COM Bridge,是一个开源Java库,它为...总之,Jacob用户指南中文版是Java开发者在处理与Windows COM组件交互时的重要参考资料,通过深入学习和实践,可以极大地扩展Java应用在Windows环境下的功能。

    jacob-1.17-M2-x64.dll,jacob-1.17-M2-x32.dll

    压缩包中的"jacob-1.17-M2 驱动 带文档"可能表示除了DLL文件外,还包含了相关的驱动程序文件以及文档资料。驱动程序是使硬件设备与操作系统进行通信的软件,对于Jacob来说,这个“驱动”可能指的是与Jacob相关的COM...

Global site tag (gtag.js) - Google Analytics