jacob使用入门及问题解析
转自:http://blog.csdn.net/hemingwang0902/article/details/4377994
本博客 jacob 列文章导读
Java操作Microsoft Word之jacob
jacob使用入门及问题解析
使用Jacob将Word转为Html或txt
使用Jacob将Word转为PDF
java通过jacob调用word (根据Word模板生成动态内容)
首先,大家先要了解一下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.jar
里面的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的测试代码(经过更改该代码在我的机器上运行正常)
- 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使用入门及问题解析的更多相关文章
- Android入门(二十一)解析XML
原文链接:http://www.orlion.ga/685/ 解析XML常用的方式有两种,一种是PULL解析一种是SAX解析. 假设解析数据为: <apps> <app> ...
- EasyUI基础入门之Parser(解析器)
前言 JQuery EasyUI提供的组件包含功能强大的DataGrid,TreeGrid.面板.下拉组合等.用户能够组合使用这些组件,也能够单独使用当中一个.(使用的形式是以插件的方式提供的) Ea ...
- javaweb入门20160305---xml的解析入门
一个XML文件除了我们人去读写以外,我们希望可以通过程序去读写,利用程序去增删改查XML的过程就是XML编程 CRUD:Create.Read.Update.Delete XML的两种解析方式 d ...
- dump解析入门-用VS解析dump文件进行排障
突然有一天部署在服务器的一个应用挂掉了,没办法只能进入服务器打开 [事件查看器]查看下,好不容易找到了打开后一脸懵逼 事件查看器查到的内容根本对我们排障没有任何作用. 在这个时候如果有对应的dump文 ...
- ECMAScript6 入门 变量的解析赋值
ES6 允许按照一定模式,先=从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 这句话的解释:第一步从数组或者对象中提取值,第二步将提取到的值对变量进行赋值 数组的解 ...
- UE4官方行为树快速入门文档解析和修改
近学习了UE4官方文档的行为树快速入门指南,发现里面的部分逻辑稍稍有点混乱和重叠,于是加入了自己的想法,修改了部分行为树逻辑,优化了其AI寻路能力. 初始的基本操作和资源创建同官方文档一样:1个Fol ...
- js模块化入门与commonjs解析与应用
JS模块化的基本原理 commonjs规范 commonjs在前端模块化中的基本使用 AMD与CMD规范剖析博客链接 一.JS模块化基本原理 在JS没有提出来模块化的时候,开发JS项目比较简单,同时也 ...
- 【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)
上篇博文,我们简单的介绍了什么是SpringMVC.这篇博文.我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们须要有主要 ...
- centos7安装nginx-1.13.6 新手入门,图文解析
系统环境 操作系统:64位CentOS Linux release 7.2.1511 (Core) 安装nginx依赖包 [root@localhost ~]# yum install gcc-c++ ...
随机推荐
- 【转载】python import和from import
import和from import都是将其他模块导入当前模块中. 刚开始一直以为import和from import唯一的区别,就是from import可以少写一些模块名.虽然from XX im ...
- Sublime Text 2.0.2,Build 2221注册码
Help ->Enter License,输入如下序列号: ----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E-855 ...
- linux shell 一些命令
https://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash wc: https: ...
- Python 读写xlsx
# pip install openpyxl # openpyxl只能用于处理xlsx,不能用于处理xlsfrom openpyxl import load_workbook # 打开文件ExcelF ...
- a:hover伪类在ios移动端浏览器内无效的解决方法
a:hover 设置的样式在ios系统的浏览器内显示不出来,看来在iOS系统的移动设备中,需要在按钮元素或body/html上绑定一个touchstart事件才能激活:active状态. 方法 一: ...
- bug优先级定义
优先级定义如下: <版本前期阶段>(功能刚提测): [P0—紧急]:完全不能满足产品要求,基本功能明显未实现或完全不可用,阻塞测试流程与进度(核心功能流程) 1.功能未实现 .功能缺失 2 ...
- Linux文件系统的详解
这里以 EXT2 文件系统为例 在Linux下,一个磁盘的最前面是MBR,大小为512Byte 在每一个分区下,第一部分是boot sector,接下来是super block,再接下来是inode, ...
- 十五oracle 触发器
一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- Java Switch Statement
Java Switch Java Switch Statement switch语句的执行规则如下 1.从第一个case开始判断,不匹配则跳到下一个case继续判断: 2.遇到brea ...
- openstack多region配置
实验 A机器 10.64.8.171 RegionOne B机器 10.64.8.142 RegionTwo Keytson(这个组件随便放在哪台都可以) openst ...