========== JAVA 深度控制 WORD
Java 控制Office 控件是非常麻烦的一件事情。
自从有了JACOB后,事情变得简单多了。
但是要实现Java灵活的控制Word还是一件非常麻烦的事情。
下面介绍几个WORD常见的对象以及一些典型的处理过程,希望对大家有帮助。
(请注意:JDK1.3.2运行 Jacob比较正常,JDK1.4有问题)
/** WORD对象*/
private ActiveXComponent word = null;
/** 文档对象*/
private Dispatch documents = null;
/** selection 对象是比较重要的一个对象 */
private Dispatch vSelection = null;
/** 一个WORD文档 */
private Dispatch wordfile = null;
1,初始化
word = new ActiveXComponent("Word.Application");
documents = word.getProperty("Documents").toDispatch();
(将JACOB 放在 WINNT\system32\ 下比较简单省事)
2,打开文件
wordfile = Dispatch.invoke(
documents,
"Open",
Dispatch.Method,
new Object[] {
strFileName,
new Variant(true),//是否进行转换 ConfirmConversions
new Variant(false)//是否只读
}, new int[1]).toDispatch();
vSelection = word.getProperty("Selection").toDispatch();
在WORD中,选定内容进行转换时,不用象Java对象一样来回的重新取,这个对象一直有效。
3,显示WORD
word.setProperty("Visible", new Variant(visible));
4,设置WORD的位置
Dispatch activeWindow = Dispatch.get(word, "Application").toDispatch();
Dispatch.put(activeWindow, "WindowState", new Variant(0));
Dispatch.put(activeWindow, "Top", new Variant(0));
Dispatch.put(activeWindow, "Left", new Variant(0));
Dispatch.put(activeWindow, "Height", new Variant(600));
Dispatch.put(activeWindow, "width", new Variant(800));
进行将JAVA内的数据和WORD交换,常用的做法是,在WORD上作一些特殊的标记,利用 FIND 和 Replace的方法进行,这个方法不是太好。
个人觉得使用超链接的模式比较方便。
有几大优点:
1, Hyperlink 有3个区域可以让开发者自己利用
ActiveDocument.Hyperlinks.Add
Anchor:=Selection.Range,
Address:="位置", //地址(可以利用) 有个缺点
SubAddress:="",//子位置(可以利用)
ScreenTip:="", //屏幕提示
TextToDisplay:="显示内容"//最好利用的东西
个人建议使用TextToDisplay。
Address 会在保存时被替换成绝对路径。
比如你录入一个
“AA.BB.CC”
保存时可能会被替换成
C:\Documents and Settings\Administrator \My Documents\AA.BB.CC
2, 可以进行自动定位
利用Hyperlinks 可以将文章中所有的超链接得到。
也可以将指定范围的超链接得到。
3, 可以自由排版
4, 可以拷贝粘贴
添加超链接:
Dispatch Hyperlinks = Dispatch.get(wordfile, "Hyperlinks").toDispatch();
Dispatch range = Dispatch.get(vSelection, "Range").toDispatch();
Dispatch h=Dispatch.invoke(Hyperlinks,
"Add", Dispatch.Method, new Object[]
{ range,
new Variant("Address"),
new Variant("SubAddress"),
new Variant("{table.fieldName}"),//建议的数据链接处
new Variant("姓名") }, // 在WORD中显示的内容
new int[4]).toDispatch();
Dispatch hRange=Dispatch.get(h, "Range").toDispatch();
Dispatch.call(hRange,"select");
//设置字体,颜色
Dispatch font = Dispatch.get(vSelection, "Font").toDispatch();
Dispatch.put(font,"Underline", new Variant(0));
Dispatch.put(font,"Color", new Variant(0));
//取消选择
Dispatch.call(vSelection,"MoveRight",new Variant(1),new Variant(1));
超链接替换内容:
1, 得到所有的超链接
//选择对象
Dispatch.call(dObject, "select");
//得到超链接集合
Dispatch Hyperlinks = Dispatch.get(vSelection, "Hyperlinks").toDispatch();
//得到有多少个超链接
int nHyperlink = Dispatch.get(Hyperlinks, "count").toInt();
//得到一个超链接
Dispatch hyperlink=Dispatch.invoke(Hyperlinks, "item",
Dispatch.Method, new Object[] { new Integer(i + 1)},
new int[1]).toDispatch()));
2, 替换内容
Dispatch.put(hyperlink, "TextToDisplay", information);
3, 取消超链接,将超链接变成普通文字。
Dispatch.call(hyperlink, "delete");
如何实现批量数据自动扩展,建议使用表格进行自动扩展,方便简单。
结合使用上面超链接的技术。会非常简单:
比如有如下数据:
DataA
DataB
1, 列出所有表格
和列出所有超链接基本一样:
private void getTables01(Dispatch objcet,Vector vTableStore) {
Dispatch tables = Dispatch.get(objcet, "tables").toDispatch();
int nTableAmount = Dispatch.get(tables, "count").toInt();
for (int i = 0; i < nTableAmount; i++) {
Dispatch table =
Dispatch
.invoke(
tables,
"item",
Dispatch.Method,
new Object[] { new Integer(i + 1)},
new int[1])
.toDispatch();
vTableStore.add(new DTable(table));
getTables01(table,vTableStore);//处理表格套用表格的情况
}
}
2, 表格的可以控制的对象
Dispatch dRows = Dispatch.get(dTable, "rows").toDispatch();//所有行
int nRows = Dispatch.get(dRows, "count").toInt();
3, 取得一行的内容
Dispatch dRow =
Dispatch
.invoke(
rows,
"item",
Dispatch.Method,
new Object[] { new Integer(row + 1)},
new int[1])
.toDispatch();
return dRow;
}catch(ComFailException cfe)
{
/** 带有合并行的情况*/
return null;
}
4, 得到一行的超链接
DHyperlink dhInRow[] = listHyperlinks(dRow);
5, 将某一行拷贝很多次
Dispatch.call(dRow, "select");
Dispatch.call(vSelection, "Copy");
int nCopyNow = nDataBlockRow - 1;
for (int nCopys = 0; nCopys < nCopyNow; nCopys++) {
try {
Dispatch.call(vSelection, "Paste");
}catch(Exception e) { e.printStackTrace();
//有时候文档损坏,可以忽略本问题,实际上已经粘贴上了
}
}
6, 替换内容,读到这里就不用介绍了。
打印预览:
Dispatch.call(wordfile,"PrintPreView");
其他的功能发掘
利用WORD的宏录制,以及VB编辑器,辅助功能,都能发掘出来。
分享到:
相关推荐
在Java编程环境中,将Word文档转换为HTML是一种常见的需求,特别是在数据处理、文档共享或网页展示等场景。本文将详细讲解如何使用Java实现这一功能,包括必要的库引用、代码示例以及转换过程。 首先,我们需要引入...
Java高并发卷二源码样例
Java 生成word文件,带样式,带页眉,带页码,带图片,带表格,需要相关iText包,包可在http://download.csdn.net/detail/wuxinxing1981/8055977 链接下载。
下面我们将深入探讨如何使用Java根据模板生成带有图片的Word文档。 首先,我们要理解“将doc模版另存为xml格式”的步骤。Microsoft Word的.doc文件实际上是一种二进制格式,但可以通过“另存为”XML文档,将内容...
在Java应用中,使用FreeMarker导出Word文档可以提供灵活的文本和数据结合的方式,尤其适用于生成报告、合同等复杂格式的文档。本篇将详细介绍如何使用FreeMarker与Java结合来导出包含多张图片的Word文档。 1. **...
Java版本的Word2Vec是一种基于Java编程语言实现的文本向量化工具,它是自然语言处理(NLP)领域中广泛使用的模型,主要用于捕获文本中的语义关系和上下文信息。Word2Vec通过两种主要的训练算法来实现这个目标:连续...
阿里巴巴JAVA开发规范word 编程规约 异常日志 MySQL 规约 工程规约 阿里巴巴JAVA开发规范word 编程规约 异常日志 MySQL 规约 工程规约 阿里巴巴JAVA开发规范word 编程规约 异常日志 MySQL 规约 工程规约 阿里巴巴...
- `Word2VEC_java-master`可能包含一个完整的项目结构,包括源代码、示例数据和测试用例。通常,项目会包含训练模型的类,如`Word2VecTrainer`,以及用于加载和使用预训练模型的类,如`WordVectorReader`。 4. **...
Spire.Doc for Java则提供了更完整的Word处理能力,包括将Word转换为HTML的功能。这个库可以轻松地将Word文档内容转换为HTML代码,从而在Web页面上预览。在项目中引入这个jar包,就可以调用其API实现转换。 实现...
在Java开发Web办公系统时,实现Word在线编辑和流转是一项重要的功能需求。这通常涉及到用户无需下载文件到本地,即可在浏览器中直接编辑Word文档,并能进行版本控制和协同工作。PageOffice组件是一个强大的工具,它...
这个项目可能包括了构建文件(如pom.xml)、源代码文件(如JavaWord.java)以及其他必要的配置。 标签中的"java导出word文档"、"jacob word导出"和"word导出图"暗示了这个项目可能还涵盖了在Word文档中插入图片的...
这个实例将带你了解如何在Java环境中使用API来创建和导出Word文档。以下是一些关键的知识点: 1. **Apache POI库**: Apache POI是Java社区开发的一个开源项目,提供了读写Microsoft Office格式文件的能力,包括...
以生成工资条为例,演示了通过PageOffice开发平台,用Java语言实现Word文档的在线打开、编辑和保存,数据区域数据的动态填充和提交,数据区域插入Word文件,动态填充和提交Word文件中Tabel的数据
最近因项目开发的需要,整理了一份用JAVA导出WORD文档,其部署步骤如下: 1、将jacob-1.14.3-x86.dll放在服务器的系统盘(或运行本机的系统):\WINDOWS\system32目录下。 2、将jacob-1.14.3-x86.dll放在JDK 的 bin ...
Java程序的编码是软件开发过程中的基础步骤,它涉及到如何将人类可读的代码转换成计算机可以理解的二进制指令。在这个过程中,"test.java" 文件是一个关键元素,它是Java编程语言源代码文件的实例。下面我们将深入...
由于项目需要,苦苦对Java操作Word进行了一番研究,包括当下比较流行的java2Word、jacob、POI、itext等,只能说各有千秋,但是没有一个是完全适合我的,没有办法,只能去各种尝试,在研究了java2Word这个jar包的API...
首先,`docx4j`是一个开源Java库,它支持创建、修改和转换Microsoft Office Open XML (OOXML)文件,如Word的.docx和Excel的.xlsx格式。这个库基于Java API,使得开发者能够利用Java进行复杂的文档处理工作,无需直接...
总的来说,这个压缩包提供了一个完整的移动彩信MM7服务的JAVA开发环境,涵盖了从发送到接收、配置到调试的所有环节。开发者可以基于这些样例和文档快速理解和实现彩信功能,将其集成到自己的应用中。
使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701