由于项目需要,取得word的内容,因研究了下Jacob,尽管POI也能解析word,但我觉得Jacob还是好些(注:Jacob好像不能在Linux下用)昨天下午看了看Jacob的源码,今天上午终于把word的表格给搞定了(速度有点小慢,不过没关系,慢慢来)。下面来和大家分享下我的快乐:
首先需要下载jacob,去官网http://sourceforge.net,下载后,需要把jacob.dll放到windows目录的system32下,把jacob.jar Copy到lib下就OK, 我用的工具是Myeclipse6.
接着我们看下打开word,嘿嘿o('_')o
Java代码
import javax.xml.ws.Dispatch;
public class Test {
private ActiveXComponent app = null;
private Dispatch doc = null;
private Dispatch docs = null;
private Dispatch wcontent = null;
public boolean openWord(String wordPath) {
boolean isOpen = true;
try {
app = new ActiveXComponent("Word.Application"); // 启动word, 生成
// 一个ActiveXComponent
// 对象
app.setProperty("Visible", new Variant(false)); // 设置文档可见性
docs = app.getProperty("Documents").toDispatch(); // 获得document对象
doc = Dispatch.invoke(
docs,
"Open",
Dispatch.Method,
new Object[] { wordPath, new Variant(false),
new Variant(true) }, new int[1]).toDispatch(); // 打开word文件
wcontent = Dispatch.get(doc, "Content").toDispatch(); // 取得word文件的内容
} catch (Exception e) {
isOpen = false;
} finally {
}
return isOpen;
}
}
上面的方法,你只需要传递word文件所在的目录就OK,下面再看看得到表格的内容的一个方法:
Java代码
/**
* 得到第X个表格的第N行第M列的内容
* @param tableNum 第几个表格
* @param row 第N行
* @param col 第M列
* @param tables 表格对象
* @return
*/
public String table(int tableNum,int row,int col,Dispatch tables) {
String tempText = ""; // 获得表格的内容
try {
int tableCount = getTablesCount(tables); // 获取文档中表格总数
if(tableCount > 0) {// 判断文档中是否存在表格
if(tableNum<=tableCount) { // 判断所查表格序号是否超过文档表格总数
// 得到第X个表格的对象
Dispatch table = Dispatch.call(tables, "Item",
new Variant(tableNum)).toDispatch(); // 得到第X个表格对象的行
Dispatch rows = Dispatch.call(table,"Rows").toDispatch(); // 获取当前表格的行数
int rowCount = Dispatch.
get(rows,"Count").getInt();
if(row <=rowCount) {
Dispatch cell = Dispatch.call(table, "Cell", new Variant(row),
new Variant(col)).toDispatch();
Dispatch rangeCell = Dispatch.call(cell,"Range").toDispatch();
tempText = Dispatch.get(rangeCell,"Text").getString(); //得到所查表格内容
tempText="0#"+tempText;
}else {
tempText = "1#行号不存在";
}
}
else {
tempText = "2#表格不存在";
}
}
}
catch(Exception e){
tempText="3#表格列不存在";
}
return tempText;
}
首先需要下载jacob,去官网http://sourceforge.net,下载后,需要把jacob.dll放到windows目录的system32下,把jacob.jar Copy到lib下就OK, 我用的工具是Myeclipse6.
接着我们看下打开word,嘿嘿o('_')o
Java代码
import javax.xml.ws.Dispatch;
public class Test {
private ActiveXComponent app = null;
private Dispatch doc = null;
private Dispatch docs = null;
private Dispatch wcontent = null;
public boolean openWord(String wordPath) {
boolean isOpen = true;
try {
app = new ActiveXComponent("Word.Application"); // 启动word, 生成
// 一个ActiveXComponent
// 对象
app.setProperty("Visible", new Variant(false)); // 设置文档可见性
docs = app.getProperty("Documents").toDispatch(); // 获得document对象
doc = Dispatch.invoke(
docs,
"Open",
Dispatch.Method,
new Object[] { wordPath, new Variant(false),
new Variant(true) }, new int[1]).toDispatch(); // 打开word文件
wcontent = Dispatch.get(doc, "Content").toDispatch(); // 取得word文件的内容
} catch (Exception e) {
isOpen = false;
} finally {
}
return isOpen;
}
}
上面的方法,你只需要传递word文件所在的目录就OK,下面再看看得到表格的内容的一个方法:
Java代码
/**
* 得到第X个表格的第N行第M列的内容
* @param tableNum 第几个表格
* @param row 第N行
* @param col 第M列
* @param tables 表格对象
* @return
*/
public String table(int tableNum,int row,int col,Dispatch tables) {
String tempText = ""; // 获得表格的内容
try {
int tableCount = getTablesCount(tables); // 获取文档中表格总数
if(tableCount > 0) {// 判断文档中是否存在表格
if(tableNum<=tableCount) { // 判断所查表格序号是否超过文档表格总数
// 得到第X个表格的对象
Dispatch table = Dispatch.call(tables, "Item",
new Variant(tableNum)).toDispatch(); // 得到第X个表格对象的行
Dispatch rows = Dispatch.call(table,"Rows").toDispatch(); // 获取当前表格的行数
int rowCount = Dispatch.
get(rows,"Count").getInt();
if(row <=rowCount) {
Dispatch cell = Dispatch.call(table, "Cell", new Variant(row),
new Variant(col)).toDispatch();
Dispatch rangeCell = Dispatch.call(cell,"Range").toDispatch();
tempText = Dispatch.get(rangeCell,"Text").getString(); //得到所查表格内容
tempText="0#"+tempText;
}else {
tempText = "1#行号不存在";
}
}
else {
tempText = "2#表格不存在";
}
}
}
catch(Exception e){
tempText="3#表格列不存在";
}
return tempText;
}
发表评论
-
MyBatis的动态SQL详解
2012-08-19 20:44 709MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我 ... -
spring-动态装配bean
2012-03-19 20:04 913http://uu011.iteye.com/admin/bl ... -
XSocket的学习和总结(一)
2012-03-14 14:20 696http://blog.csdn.net/lizhi20040 ... -
xsocket基础学习一
2012-03-14 09:55 11121、这个开源的框架只需要有一个J2SE5.0就行了不需要其他的 ... -
io与nio的区别
2012-03-14 09:52 804io:提供读写操作 nio提供读写操作,基本单位为byteB ... -
详解FreeMarker生成复杂Word文档
2012-03-03 11:57 911http://www.java.sh/web/freemark ... -
java生成word,html文件并将内容保存至数据库
2012-03-03 11:32 943在最近的一个项目中需要将一段字符类型的文本存为word,htm ... -
Jacob解决Word文档的读写问题
2012-03-03 11:19 1075转于:北极之光的博客 标签:jacob word com 表格 ... -
Java服务器端List对象转换为JSON对象并返回客户端实例
2011-04-26 01:53 809http://apps.hi.baidu.com/share/ ... -
如何将tomcat启动注册为系统服务
2011-04-06 04:02 892曾经做过J2EE开发的朋友,一定对Tomcat这个东西最熟 ... -
添加tomcat 服务删除
2011-04-06 03:15 1301tomcat服务删除 关键字: tomcat服务删除 命令行 ... -
如何用Java操作Word, Excel, PDF文档
2011-04-05 03:27 720http://java.ccidnet.com/art/353 ... -
javascript 关闭
2011-03-31 10:32 0http://www.abab123.com/bbs/down ... -
定数显示通知
2011-03-30 11:56 0window.setInterval('shows()',10 ... -
两个LIST比对筛选返回LIST比对结果(转)
2011-03-28 11:09 1266两个LIST比对筛选返回LIST比对结果 不知道大家有没有碰到 ... -
map 转换Set遍历
2011-03-28 10:25 927Map map=new HashMap(); map.put( ... -
java实现mysql 数据库备份
2011-03-21 16:55 1106//db数据库 //ip 备份数据库地址 //user用户名 ...
相关推荐
jacob解析word excel的jar包 dll文件
jacob jacob配置 java操作word java操作word:jacob(方法解析+环境配置)
通过目录找出对应的标题, 通过两个标题的位置得到之间的段落(得到了段落Range,但是我只处理了text,没有处理table和picture,这些都可以从Range中取出)
以jacob将上传的word文件解析成html显示给客户端
使用Jacob解析WORD文件 Google的Search API的使用 安装:直接在Eclipse中选取“import->Existing Project” Eclipse工程/ch9:原书第十二章的工程文件 使用正则表达式解析网页文件 使用HTMLParser解析网页文件 ...
使用Jacob解析WORD文件 Google的Search API的使用 安装:直接在Eclipse中选取“import->Existing Project” Eclipse工程/ch9:原书第十二章的工程文件 使用正则表达式解析网页文件 使用HTMLParser解析网页文件 ...
使用Jacob解析WORD文件 Google的Search API的使用 安装:直接在Eclipse中选取“import->Existing Project” Eclipse工程/ch9:原书第十二章的工程文件 使用正则表达式解析网页文件 使用HTMLParser解析网页文件 ...
基于上次上传的jacob按目录解析word,又开发了按目录拆分文档功能并将拆分后的小文档另存为html文件。 基于上次上传的jacob按目录解析word,又开发了按目录拆分文档功能并将拆分后的小文档另存为html文件。
以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob ...
以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob ...
java解析word 解压缩后jacob.dll复制到system32下,jacob.jar复制到bin目录下即可
解析word 封装好了的接口 直接调用就ok了
Word从2003开始支持XML格式,用XML+Freemarder还做就很简单了,大致的思路是先用office2003或者2007编辑好 word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。...
JAVA 对word 内容的提取返回String 的代码 两种方式详细的资源描述有机会获得我们的推荐,更有利于他人下载,赚取更多积分
freemarker+xml动态模板生成doc文件技术,比jacob更加好用,不存在系统兼容性问题,但是依赖于word2003以上的版本才能解析
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...