iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何利用JAVA语言深度控制Word
  • 142
分享到

如何利用JAVA语言深度控制Word

2023-06-03 05:06:32 142人浏览 泡泡鱼
摘要

这篇文章主要介绍了如何利用JAVA语言深度控制Word,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java 控制Office 控件是非常麻烦的一件事情。自从有了JACOB后

这篇文章主要介绍了如何利用JAVA语言深度控制Word,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Java 控制Office 控件是非常麻烦的一件事情。
自从有了JACOB后,事情变得简单多了。
但是要实现Java灵活的控制Word还是一件非常麻烦的事情。

下面介绍几个WORD常见的对象以及一些典型的处理过程,希望对大家有帮助。
(请注意:jdk1.3.2运行 Jacob比较正常,JDK1.4有问题)

private ActiveXComponent word = null;

private Dispatch documents = null;

private Dispatch vSelection = null;

private Dispatch wordfile = null;
1,初始化
word = new ActiveXComponent("Word.Application");
documents = word.getProperty("Documents").toDispatch();
(将JACOB 放在 WINNTsystem32 下比较简单省事)
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 SettingsAdministrator My DocumentsAA.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");

感谢你能够认真阅读完这篇文章,希望小编分享的“如何利用JAVA语言深度控制Word”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 如何利用JAVA语言深度控制Word

本文链接: https://www.lsjlt.com/news/232891.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何利用JAVA语言深度控制Word
    这篇文章主要介绍了如何利用JAVA语言深度控制Word,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java 控制Office 控件是非常麻烦的一件事情。自从有了JACOB后...
    99+
    2023-06-03
  • C语言如何格式化输出控制长度
    这篇文章主要介绍了C语言如何格式化输出控制长度的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何格式化输出控制长度文章都会有所收获,下面我们一起来看看吧。c语言格式化输出控制长度实现ls命令的时候,输出的...
    99+
    2023-06-16
  • DCL 深度解析:掌握数据库控制语言的奥秘
    数据控制语言 (DCL) 是一个强大工具,允许数据库管理员管理用户权限、角色和安全机制。通过 DCL,管理员可以有效地控制数据库资源的访问和使用。 DCL 语句 DCL 由几个关键语句组成: GRANT (授予权限):授予特定用户或角色...
    99+
    2024-03-14
    数据库DCL(数据控制语言)
  • 如何在Java中利用IOC控制反转
    这篇文章给大家介绍如何在Java中利用IOC控制反转,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以...
    99+
    2023-05-31
    java ioc
  • 如何深度剖析Python语言特点
    这期内容当中小编将会给大家带来有关如何深度剖析Python语言特点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这里并不涉及python的特殊规则和细节,目标是通过示例使你快速了解Python语言的特点。...
    99+
    2023-06-17
  • 深度挖掘:利用Go语言构建高效爬虫
    深入探索:使用Go语言进行高效爬虫开发 引言:随着互联网的飞速发展,信息的获取变得越来越便捷。而爬虫作为一种自动化获取网站数据的工具,日益受到人们的关注和重视。在众多的编程语言中,Go语言由于其并发性高、性能...
    99+
    2024-01-30
    Go语言 爬虫 高效
  • 如何利用Java日志记录系统,实现对应用程序的深度监控?
    Java日志记录系统是一种常见的日志记录方式,它可以帮助我们记录应用程序运行时的各种信息,包括错误信息、调试信息、性能信息等等。通过利用Java日志记录系统,我们可以实现对应用程序的深度监控,从而更好地了解应用程序的运行状态,及时发现和解决...
    99+
    2023-11-09
    同步 numy 日志
  • 如何利用python/R语言绘制圣诞树
    本篇内容介绍了“如何利用python/R语言绘制圣诞树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Pythonimport tu...
    99+
    2023-06-22
  • 如何理解JAVA的控制语句
    如何理解JAVA的控制语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、流程控制顺序结构就是按照代码的先后顺序,依次执行。二、if语句格式:  &n...
    99+
    2023-06-25
  • 如何使用Go语言和Redis做流量控制
    如何使用Go语言和Redis做流量控制引言在一个高并发的网络应用中,流量控制是非常重要的一个环节。为了保证系统的稳定和可靠性,我们需要对流量进行限制和管理。本文将介绍如何使用Go语言和Redis来实现流量控制,并提供具体的代码示例。背景在分...
    99+
    2023-10-28
    Go语言 redis 流量控制
  • 如何利用R语言绘制时间序列图
    这篇文章主要讲解了“如何利用R语言绘制时间序列图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用R语言绘制时间序列图”吧!数据GDP.csv文件,存储1879~2019年河南省GDP数...
    99+
    2023-06-08
  • Java中的控制流如何利用条件语句与循环结构确定
    Java中的控制流如何利用条件语句与循环结构确定?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、块作用域块(block),即复合语句。是指由一对大括号括起来的...
    99+
    2023-05-31
    java 循环结构 条件语句
  • 深度探索Go语言底层技术:底层究竟使用何种语言?
    深度探索Go语言底层技术:底层究竟使用何种语言? Go语言作为一门高效、简洁的编程语言,广受开发者喜爱。然而,对于其底层技术到底是如何实现的,很多人却一直心存疑惑。底层技术通常是指编译...
    99+
    2024-03-07
    go语言 语言选择 底层技术 垃圾回收器
  • C语言多样式的格式控制符如何使用
    这篇文章主要讲解了“C语言多样式的格式控制符如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言多样式的格式控制符如何使用”吧!先来看一个代码示例:#define _CRT...
    99+
    2023-07-05
  • 如何分析C语言与Java在流程控制上的异同 (转)
    这篇文章将为大家详细讲解有关如何分析C语言与Java在流程控制上的异同 (转),文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C与Java在流程控制上的异同  过 程 式 编 程( 代 表 语...
    99+
    2023-06-03
  • 如何利用java控制鼠标操作一些重复的事情
    目录场景Robot的简单了解鼠标移动需要知道位置企业微信添加好友附更多实例教程总结场景 女朋友最近被安排了一个企业微信添加客户的沙雕活,然后跟我吐槽说,每天都要加,都想离职了,为了不...
    99+
    2024-04-02
  • 如何利用Java处理自然语言并优化缓存?
    Java作为一种广泛使用的编程语言,可以用来处理自然语言并优化缓存。在本文中,我们将探讨如何使用Java处理自然语言,并提供一些代码示例来帮助您更好地理解。 自然语言处理 自然语言处理(NLP)是一种计算机科学领域,它涉及到如何让计算机...
    99+
    2023-09-30
    自然语言处理 leetcode 缓存
  • SQL Server中如何使用控制语句
    SQL Server中如何使用控制语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.语句块(BEGIN…END)语句块语法如下: BE...
    99+
    2024-04-02
  • CSS如何使用伪类控制边框长度
    本篇内容介绍了“CSS如何使用伪类控制边框长度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 这里使用的...
    99+
    2024-04-02
  • windows10控制面板没有语言选项如何解决
    这篇文章主要介绍“windows10控制面板没有语言选项如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows10控制面板没有语言选项如何解决”文章能帮助大家解决问题。解决方法按下键盘...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作