`

JAVA 深度控制 WORD 带完整样例

阅读更多
========== 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编辑器,辅助功能,都能发掘出来。
分享到:
评论
1 楼 sogo167 2011-12-11  
[i][i][/i][u[i]][/u]
引用
hhh
引用
[/quote[/i]][/i]

相关推荐

    java深度处理word.doc

    Java深度处理Word文档是指使用Java语言操作Microsoft Word文档的技术,本文将详细介绍如何使用Java语言来操作Word文档,包括创建新的Word文档、打开已存在的Word文档、编辑Word文档等操作。 Java操作Word文档的原理...

    Java 生成word文件,带样式,带页眉,带页码,带图片,带表格

    Java 生成word文件,带样式,带页眉,带页码,带图片,带表格,需要相关iText包,包可在http://download.csdn.net/detail/wuxinxing1981/8055977 链接下载。

    JAVA课程设计,近10个完整样例供你参考!

    JAVA课程设计大全,近10个完整样例供你参考! 即时通信系统(Java实现) 计算器JAVA实现 日历记事本JAVA实现 文件传输java实现 图书管理系统JAVA实现 网络聊天室JAVA实现 文件加密JAVA实现 希望对你有所帮助,下载...

    JMS+ActiveMQ 完整样例代码

    在"JMS+ActiveMQ 完整样例代码"中,我们可以学习到以下几个重要的知识点: 1. **点对点(Point-to-Point)模式**:这种模式下,消息从一个生产者发送到一个队列,然后由一个或多个消费者接收。每个消息只会被一个...

    LibreOffice:java 预览Excel、java预览word、java预览DOCX

    请注意,由于预览Word和DOCX文件通常需要完整的Office套件支持,所以在非Windows环境下(如Linux或macOS),可能需要依赖于LibreOffice的Java接口,而不是直接调用Office组件。同时,预览过程可能消耗较大资源,特别...

    java根据模版生成带图片的word文档

    下面我们将深入探讨如何使用Java根据模板生成带有图片的Word文档。 首先,我们要理解“将doc模版另存为xml格式”的步骤。Microsoft Word的.doc文件实际上是一种二进制格式,但可以通过“另存为”XML文档,将内容...

    Java编程生成word文件设置字体段落格式

    Java对PageOffice编程,从空白的word模板动态生成word文件,填充文本内容、图片,同时设置文本的字体、段落、格式。 PageOffice是标准Java组件,标准JSP Tag标签方式引用,完美支持Eclipse、MyEclipse等开发工具。 ...

    读书笔记:Java测试驱动开发中的样例代码.zip

    读书笔记:Java测试驱动开发中的样例代码

    java版本的word2vec

    Java版本的Word2Vec是一种基于Java编程语言实现的文本向量化工具,它是自然语言处理(NLP)领域中广泛使用的模型,主要用于捕获文本中的语义关系和上下文信息。Word2Vec通过两种主要的训练算法来实现这个目标:连续...

    Java深度历险完整版

    Java深度历险 深入Java 2 SDK 深入类别载入器 Java与MS Office 用Visual Studio.net操控Java虚拟机 package与import机制 Ant 附录A.Java 2 SDK原版码概观

    Word2Vec java版实现

    - `Word2VEC_java-master`可能包含一个完整的项目结构,包括源代码、示例数据和测试用例。通常,项目会包含训练模型的类,如`Word2VecTrainer`,以及用于加载和使用预训练模型的类,如`WordVectorReader`。 4. **...

    freeMarker导出word两种方式最全代码样例.rar

    本案例中的"freeMarker导出word两种方式最全代码样例.rar"是一个压缩包,包含了一些示例代码,展示了如何在SpringBoot应用中利用FreeMarker生成Word文档。以下是对这两种方法的详细说明: 1. **第一种方式:HTML转...

    Java html转word 使用FreeMarker

    在IT行业中,Java是一种广泛应用的编程语言,而HTML和Word则是两种常见的文档格式。当我们需要在Web应用中生成可编辑的文档或者将网页内容导出为Word格式时,`FreeMarker`是一个非常实用的工具。这个标题“Java html...

    java数据源导出WORD文档(包括图片、表格及文本)

    最近因项目开发的需要,整理了一份用JAVA导出WORD文档,其部署步骤如下: 1、将jacob-1.14.3-x86.dll放在服务器的系统盘(或运行本机的系统):\WINDOWS\system32目录下。 2、将jacob-1.14.3-x86.dll放在JDK 的 bin ...

    JMS+ActiveMQ+Spring 完整样例代码

    **JMS+ActiveMQ+Spring 完整样例代码详解** 在Java世界中,消息队列(Message Queue,简称MQ)是一种重要的中间件技术,它允许应用程序之间通过异步通信来解耦系统组件。Java消息服务(Java Message Service,简称...

    java将html文件生成word文件

    首先,`docx4j`是一个开源Java库,它支持创建、修改和转换Microsoft Office Open XML (OOXML)文件,如Word的.docx和Excel的.xlsx格式。这个库基于Java API,使得开发者能够利用Java进行复杂的文档处理工作,无需直接...

    java调用PageOffice的样例代码

    java调用PageOffice的样例代码

    移动彩信MM7 JAVA样例

    总的来说,这个压缩包提供了一个完整的移动彩信MM7服务的JAVA开发环境,涵盖了从发送到接收、配置到调试的所有环节。开发者可以基于这些样例和文档快速理解和实现彩信功能,将其集成到自己的应用中。

    使用java Apache poi 根据word模板生成word报表例子

    使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701

    java操作word(包含书签插值)

    Java作为一种广泛使用的编程语言,提供了多种库来操作Word文档,实现自动化填充模板,例如书签插值,这在合同制作中非常有用。本文将详细讲解如何使用Java操作Word,特别是针对书签插值的方法,以及相关的技术和工具...

Global site tag (gtag.js) - Google Analytics