`
xinklabi
  • 浏览: 1591896 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

[转]jacob使用入门及问题解析(项目中将word设置为最终版本时报了这样的错误)

    博客分类:
  • Java
 
阅读更多

转自:http://www.blogjava.net/lusm/archive/2007/03/27/106737.html

 

项目中报的这样错误(后来发现服务器上没装office,system32下也没有jacob.dll文件):

Caused by: com.jacob.com.ComFailException: Can't get object clsid from progid
 at com.jacob.com.Dispatch.createInstanceNative(Native Method)
 at com.jacob.com.Dispatch.<init>(Dispatch.java:99)
 at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)
 at com.cfets.project.common.util.MSWordManager.acceptAllRevisionsForDoc(MSWordManager.java:11)
 at com.cfets.project.service.impl.DevelopmentGuideServiceImpl.updateRequirementAfterGuideCheck

 

好了进如正题,最近在帮个朋友做java调用office的东东,花了些时间,终于搞定了
由于问题多多,现在把过程和大家分享:

首先,大家先要了解一下jacob ,官方的解释是Java COM Bridge,即java和
com组件间的桥梁(进一步了解com/dcom: http://docs.huihoo.com/com/
com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件
这里说说为什么我们用java去操纵office(如:word)要使用com,而不直接
使用java去做?
首先,我们清楚office是建立在windows平台之上的,本身是一个软件,除了
他自己提供的宏似乎没有什么能对他进行直接的操作;在windows平台上为了
解决像这样的不同应用软件,通信缺乏通用api问题,推出了com的解决方案;
我们使用dll中的一组或多组相关的函数存取组件数据,总的合称为接口
具体到每个细节的实现称为方法;如果我们要调用接口里的方法,唯一的途径就是
调用指向接口的指针;
所以总的来说使用就是dll完成api的转换;
如果你听不懂,则称为废话(不懂没关系,会用就好,用久自然懂了);
开玩笑,呵呵
好了com讲完,我们开始我们的主要内容吧!

大家先下载这里
jacob_1.9.zip
里面的jacob.jar是我们要用的包
jacob.dll就是我前面说的com组件
把包里的jacob.dll放到c:/windows/system32下
讲解麻烦,画个图大家看 好

jacob.png

值得注意的是,不同的版本的系统使用不同的dll文件
所以如果你编译成功,但运行失败一般是dll文件问题
遇到这种情况,可以到
http://downloads.sourceforge.net/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0

下载其他的版本的 dll 文件。
先给大家个word的测试代码(经过更改该代码在我的机器上运行正常)
以后有会找时间,推出其他的office代码


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

public class WordDocumentProperties {
// 声明一个word对象
private ActiveXComponent objWord;

// 声明四个word组件
private Dispatch custDocprops;

private Dispatch builtInDocProps;



private Dispatch document;

private Dispatch wordObject;


public WordDocumentProperties() {
}


/** */ /**
* 打开word文挡
*/

public void open(String filename) {
// 创建一个word对象
objWord = new ActiveXComponent( " Word.Application " );

// 为wordobject组件附值
wordObject = (Dispatch)(objWord.getObject()); // 改了这里

// 生成一个只读方式的word文挡组件
Dispatch.put(wordObject, " Visible " , new Variant( false ));

// 获取文挡属性
Dispatch documents = objWord.getProperty( " Documents " ).toDispatch();

// 打开激活文挡
document = Dispatch.call(documents, " Open " , filename).toDispatch();
}



public void selectCustomDocumentProperitiesMode() {

custDocprops
= Dispatch.get(document, " CustomDocumentProperties " )
.toDispatch();
}



public void selectBuiltinPropertiesMode() {

builtInDocProps
= Dispatch.get(document, " BuiltInDocumentProperties " )
.toDispatch();
}


/** */ /**
* 关闭文挡
*/

public void close() {

Dispatch.call(document,
" Close " );
}



public String getCustomProperty(String cusPropName) {
try {
cusPropName
= Dispatch.call((Dispatch) custDocprops, " Item " ,
cusPropName).toString();
}
catch (ComException e) {

cusPropName
= null ;
}


return cusPropName;
}


public String getBuiltInProperty(String builtInPropName) {
try {
builtInPropName
= Dispatch.call((Dispatch) builtInDocProps, " Item " ,
builtInPropName).toString();
}
catch (ComException e) {

builtInPropName
= null ;
}


return builtInPropName;
}



public static void main(String[] args) {
try {

WordDocumentProperties jacTest
= new WordDocumentProperties();


jacTest.open(
" s.doc " );


jacTest.selectCustomDocumentProperitiesMode();


jacTest.selectBuiltinPropertiesMode();


String custValue
= jacTest.getCustomProperty( " Information Source " );


String builtInValue
= jacTest.getBuiltInProperty( " Author " );


jacTest.close();


System.out.println(
" Document Val One: " + custValue);
System.out.println(
" Document Author: " + builtInValue);

}
catch (Exception e) {
System.out.println(e);
}

}

}
分享到:
评论

相关推荐

    Jacob实现word转PDF之格式最美转化

    在这个场景中,我们使用Jacob来实现Word文档到PDF的转换,以保持格式的一致性和美观性。在转换过程中,确保你的计算机上已经安装了Office 2010或更高版本,因为较低版本可能无法支持某些功能,导致转换失败或出现...

    使用Jacob将word转换为html

    本篇我们将聚焦于“使用Jacob将Word转换为HTML”,这是一个利用Java开发的库,名为Jacob,它提供了与Microsoft Office交互的能力。 Jacob(Java COM Bridge)是一个开源项目,其主要功能是为Java应用程序提供对COM...

    java操作word:jacob(方法解析+环境配置)

    ### Java操作Word:Jacob(方法解析+环境配置) #### Jacob简介 Jacob是一个开源的Java-COM桥接工具,它允许Java程序与Windows平台上的COM组件进行交互。这意味着开发者可以通过Java来控制诸如Microsoft Word、...

    java使用jacob将word 转pdf

    ### Java使用JACOB将Word转为PDF:详解与实践 #### 一、配置环境与原理简介 在Java中利用JACOB库实现Word文档转PDF功能时,首先需要完成必要的环境配置工作。 ##### 1. JACOB库介绍 JACOB(Java COM Bridge)是一...

    使用jacob将word转换为html的完整代码

    如果是MyEclipse这样的集成开发环境(IDE),你可以在项目的构建路径设置中添加这个jar文件。 以下是一个简单的示例代码,展示如何使用jacob将Word文档转换为HTML: ```java import ...

    jacob操作word转换成pdf

    在这个场景中,我们将讨论如何利用JACOB将Word文档转换为PDF。 首先,我们需要理解JACOB的工作原理。JACOB是通过Java的JNI(Java Native Interface)来调用COM接口的,这样就可以在Java代码中直接操纵COM对象,例如...

    jacob 操作word 文档详解

    Jacob 操作 Word 文档详解 Jacob 操作 Word 文档概述 Jacob 是一个 Java 库,用于访问和操作 Microsoft Office 应用程序,包括 Word。它提供了一个基于 COM(Component Object Model)的接口,允许 Java 应用...

    利用Jacob 实现了word转PDF

    以下是对利用Jacob实现Word转PDF的详细说明: 1. **Jacob库介绍**: Jacob是一个Java到COM桥接器,它使得Java开发者能够使用COM组件,如Microsoft Office的Word应用,来执行特定的任务。Jacob通过JNI(Java Native...

    使用jacob转换office为PDF

    "使用jacob转换office为PDF"是解决这一问题的一种方法。JACOB(Java COM Bridge)是一个Java库,它允许Java应用程序与COM(Component Object Model)组件进行交互。在这个场景中,JACOB被用来调用Microsoft Office的...

    java使用jacob将word,excel,ppt转成html

    Java 使用 Jacob 库将 Office 文件转换为 HTML 是一个常见的需求,尤其在自动化处理文档或在线预览场景中。Jacob(Java and COM Bridge)是一个 Java 库,它允许 Java 应用程序通过 COM(Component Object Model)...

    Jacob操作word 文档的方法集!(含创建目录),使用的Jacob版本是1.5

    在这个“Jacob操作word文档的方法集”中,我们将探讨如何使用Jacob 1.5版本来创建和操作Word文档,特别是创建目录。 首先,为了使用Jacob,你需要在你的项目中添加Jacob的jar文件。这通常涉及到将库添加到项目的类...

    通过jacob实现word转为HTML

    这通常包括下载Jacob的JAR文件,将其添加到项目的类路径中,并确保你的系统已经安装了与Jacob版本匹配的Microsoft Office,因为Jacob依赖于Office的COM接口。 接下来,我们来看一下如何编写转换代码。以下是一个...

    java使用jacob通过word模板生成word文档项目实例

    Java使用Jacob库通过Word模板生成Word文档是一种常见的技术实践,特别是在需要自定义生成大量结构化报告的场景下。本项目实例提供了一个完整的解决方案,可以直接在MyEclipse环境中运行。下面将详细讲解这个项目的...

    [jacob]---------------->java 实现 word 转换为html jacob

    标题中的 "[jacob]----------------&gt;java 实现 word 转换为html jacob" 提示我们,这个压缩包文件包含了一个使用Java编程语言,并利用Jacob库将Microsoft Word文档转换为HTML格式的示例代码。Jacob是Java和COM...

    java中 jacob各个版本jar及相应的dll文件,能适应各种jdk ,word转pdf,图片转pdf

    这样的资源对于开发者来说非常有用,因为可以方便地在不同JDK版本的项目中选择合适的Jacob版本。 在实际应用中,使用Jacob进行Word转PDF和图片转PDF的操作大致如下: 1. **Word转PDF**: - 首先,你需要加载Word...

    jacob以目录和段落分析读取Word文档(自己写的)

    除了基本的读取和操作,Jacob还可以用来进行更复杂的Word文档操作,如格式设置、页眉页脚的修改、样式应用等。例如,通过`Range.setStart()`和`Range.setEnd()`可以指定范围,然后使用`Range.applyTemplate()`来应用...

    word转换为txt(java实现,调用jacob包)

    本示例主要讲解如何使用Java编程语言,结合Jacob库实现Word文档(doc、docx格式)批量转换为纯文本(txt)文件。Jacob库是Java和Microsoft COM接口之间的一个桥梁,允许Java程序调用微软的Office应用,如Word,进行...

    SSM+freemaker+jacob实现生成word文档并转换为PDF 另一个是错的

    错误可能出现在生成Word文档、使用Jacob操作Word,或者转换为PDF的任一阶段。可能的原因包括但不限于: 1. FreeMarker模板语法错误:模板中的表达式或控制结构可能有误。 2. 数据绑定问题:Java代码未能正确地将...

    java使用jacob通过模板生成word文档完整项目

    Java使用Jacob库通过模板生成Word文档是一个常见的技术实践,尤其在企业级应用中,这种技术常用于批量生成报告、合同等文档。Jacob全称为Java Advanced COM Bridge,它为Java提供了与COM组件交互的能力,让我们可以...

Global site tag (gtag.js) - Google Analytics