首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

(转载)java调用com组件操作word运用总结(jacob)(3)

2012-08-28 
(转载)java调用com组件操作word使用总结(jacob)(3)1.由于应用程序配置不正确,不能启用dll文件解决:版本不

(转载)java调用com组件操作word使用总结(jacob)(3)
1.由于应用程序配置不正确,不能启用dll文件;

解决:版本不对,换另一个版本试一下.

2. ERROR [http-8080-Processor25] - Servlet.service() for servlet FileUploaded threw exception

     java.lang.UnsatisfiedLinkError: no jacob-1.14.3-x86 in java.library.path

     at java.lang.ClassLoader.loadLibrary(Unknown Source)

     at java.lang.Runtime.loadLibrary0(Unknown Source)

     at java.lang.System.loadLibrary(Unknown Source)

将dll文件复制到tomcat\bin目录下重新启动tomcat5.5

3.使用过程中(将项目发布到Tomcat5下运行时)提示

java.lang.UnsatisfiedLinkError:

Native Library D:\Program Files\Apache Software Foundation\Tomcat 5.5\bin\jacob-1.14.3-x86.dll

already loaded in another classloader

解决:将%Tomcat 5.5%\webapps\XXXX\WEB-INF\lib\下的jacob.jar包剪切到%Tomcat 5.5%\shared\lib目录下(或删除).




五.自己改写WordBean类:

1.改写前你要知道VBA,熟悉怎样用VBA操作word;

2.将VBA操作改到java代码;要知道com.jacob.com.Dispatch可容纳任何VBA中的集合对象;

如:Dispatch paragraphs = Dispatch.get(doc, "Paragraphs").toDispatch(); // 将Paragraphs 集合对象赋给Dispatch对象;

3.使用VBA对象属性:

如:int paragraphCount = Dispatch.get(paragraphs, "Count").getInt(); //调用Dispatch.get()方法获取Paragraphs 集合对象的Count属性;

4.调用VBA对象方法:

在VBA帮助中我们找到Document 对象Close方法是这样声明的:

expression.Close(SaveChanges, OriginalFormat, RouteDocument)

expression   必需。该表达式返回以上的一个对象。

SaveChanges   Variant 类型,可选。指定保存文档的操作。可以是下列 WdSaveOptions 常量之一:wdDoNotSaveChanges、wdPromptToSaveChanges 或 wdSaveChanges。

OriginalFormat   Variant 类型,可选。指定保存文档的格式。可以是下列 WdOriginalFormat 常量之一:wdOriginalDocumentFormat、wdPromptUser 或 wdWordDocument。

RouteDocument   Variant 类型,可选。如果该属性值为 True,则将文档发送给下一个收件人。如果文档没有附加传送名单,则忽略该参数。


因些我们可在WordBean添加一个这样的方法关闭文档:

public void closeDocument(int val) {

Dispatch doc = Dispatch.call(documents, "Open", docPath).toDispatch();   //doc是Document对象,调用

Dispatch.call(doc, "Close", new Variant(val));   // val 0不保存修改 -1 保存修改 -2 提示是否保存修改,对应VBA中Document 对象Close方法的SaveChanges参数

doc = null;

}

你会注意到Dispatch类重载了很多call方法,这与VBA中方法基本相似有很多参数是缺省的:

你可还会注意到Dispatch还有个invoke方法其实它和call差不多也是调用VBA对象方法的,只参数的形式不同(我目前这样认为)

Dispatch还有很多方法调用都是为配合调用VBA对象的方法,我还没有时间深入的看,等都明白再补上这部分说明;



参考(自己Gooogle一下):

JAVA 深度控制 WORD;

Aspose.Words for Java 发布-操作word的工具

用Java操作Office 2007(http://blog.163.com/peigen_peigen/blog/static/2704780200863082444566/)

Java/Office2007 以往java程序员要访问office文档,往往要借助各种各样的com组件,jni是难以避免的,因为office文档(word、excel、ppt)是二进制存储的。但是在许多系统中都要用到office文档,这个java程序员带来了一定的麻烦。   随着office2007的出现,文档存储支持OpenXML,使得java程序读写office文档不用必须借助第三方控件。以word2007为例,文档存储为*.docx文件,这实际上是一个压缩文件,通过java的ZIPjar包、TAR jar包,都可以访问,可以使用100%纯java代码完成对word2007文件的读取、写入操作。   比较详细的一个例子如下:http://www.infoq.com/articles/cracking-office-2007-with-java,有兴趣的可以去参考一下。   另外,office文档操作也有很多其他方法,比如POI、j-Interop等第三方工具包。

热点排行