转自: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下
讲解麻烦,画个图大家看 好
值得注意的是,不同的版本的系统使用不同的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的转换,以保持格式的一致性和美观性。在转换过程中,确保你的计算机上已经安装了Office 2010或更高版本,因为较低版本可能无法支持某些功能,导致转换失败或出现...
本篇我们将聚焦于“使用Jacob将Word转换为HTML”,这是一个利用Java开发的库,名为Jacob,它提供了与Microsoft Office交互的能力。 Jacob(Java COM Bridge)是一个开源项目,其主要功能是为Java应用程序提供对COM...
### Java操作Word:Jacob(方法解析+环境配置) #### Jacob简介 Jacob是一个开源的Java-COM桥接工具,它允许Java程序与Windows平台上的COM组件进行交互。这意味着开发者可以通过Java来控制诸如Microsoft Word、...
### Java使用JACOB将Word转为PDF:详解与实践 #### 一、配置环境与原理简介 在Java中利用JACOB库实现Word文档转PDF功能时,首先需要完成必要的环境配置工作。 ##### 1. JACOB库介绍 JACOB(Java COM Bridge)是一...
如果是MyEclipse这样的集成开发环境(IDE),你可以在项目的构建路径设置中添加这个jar文件。 以下是一个简单的示例代码,展示如何使用jacob将Word文档转换为HTML: ```java import ...
在这个场景中,我们将讨论如何利用JACOB将Word文档转换为PDF。 首先,我们需要理解JACOB的工作原理。JACOB是通过Java的JNI(Java Native Interface)来调用COM接口的,这样就可以在Java代码中直接操纵COM对象,例如...
Jacob 操作 Word 文档详解 Jacob 操作 Word 文档概述 Jacob 是一个 Java 库,用于访问和操作 Microsoft Office 应用程序,包括 Word。它提供了一个基于 COM(Component Object Model)的接口,允许 Java 应用...
以下是对利用Jacob实现Word转PDF的详细说明: 1. **Jacob库介绍**: Jacob是一个Java到COM桥接器,它使得Java开发者能够使用COM组件,如Microsoft Office的Word应用,来执行特定的任务。Jacob通过JNI(Java Native...
"使用jacob转换office为PDF"是解决这一问题的一种方法。JACOB(Java COM Bridge)是一个Java库,它允许Java应用程序与COM(Component Object Model)组件进行交互。在这个场景中,JACOB被用来调用Microsoft Office的...
Java 使用 Jacob 库将 Office 文件转换为 HTML 是一个常见的需求,尤其在自动化处理文档或在线预览场景中。Jacob(Java and COM Bridge)是一个 Java 库,它允许 Java 应用程序通过 COM(Component Object Model)...
在这个“Jacob操作word文档的方法集”中,我们将探讨如何使用Jacob 1.5版本来创建和操作Word文档,特别是创建目录。 首先,为了使用Jacob,你需要在你的项目中添加Jacob的jar文件。这通常涉及到将库添加到项目的类...
这通常包括下载Jacob的JAR文件,将其添加到项目的类路径中,并确保你的系统已经安装了与Jacob版本匹配的Microsoft Office,因为Jacob依赖于Office的COM接口。 接下来,我们来看一下如何编写转换代码。以下是一个...
Java使用Jacob库通过Word模板生成Word文档是一种常见的技术实践,特别是在需要自定义生成大量结构化报告的场景下。本项目实例提供了一个完整的解决方案,可以直接在MyEclipse环境中运行。下面将详细讲解这个项目的...
标题中的 "[jacob]---------------->java 实现 word 转换为html jacob" 提示我们,这个压缩包文件包含了一个使用Java编程语言,并利用Jacob库将Microsoft Word文档转换为HTML格式的示例代码。Jacob是Java和COM...
这样的资源对于开发者来说非常有用,因为可以方便地在不同JDK版本的项目中选择合适的Jacob版本。 在实际应用中,使用Jacob进行Word转PDF和图片转PDF的操作大致如下: 1. **Word转PDF**: - 首先,你需要加载Word...
除了基本的读取和操作,Jacob还可以用来进行更复杂的Word文档操作,如格式设置、页眉页脚的修改、样式应用等。例如,通过`Range.setStart()`和`Range.setEnd()`可以指定范围,然后使用`Range.applyTemplate()`来应用...
本示例主要讲解如何使用Java编程语言,结合Jacob库实现Word文档(doc、docx格式)批量转换为纯文本(txt)文件。Jacob库是Java和Microsoft COM接口之间的一个桥梁,允许Java程序调用微软的Office应用,如Word,进行...
错误可能出现在生成Word文档、使用Jacob操作Word,或者转换为PDF的任一阶段。可能的原因包括但不限于: 1. FreeMarker模板语法错误:模板中的表达式或控制结构可能有误。 2. 数据绑定问题:Java代码未能正确地将...
Java使用Jacob库通过模板生成Word文档是一个常见的技术实践,尤其在企业级应用中,这种技术常用于批量生成报告、合同等文档。Jacob全称为Java Advanced COM Bridge,它为Java提供了与COM组件交互的能力,让我们可以...