社区
Java EE
帖子详情
求助。。。
langhey
2008-05-23 02:05:47
有Jacob的高手吗?
要替换word文档里文本框里的内容应该怎么做???
...全文
47
2
打赏
收藏
求助。。。
有Jacob的高手吗? 要替换word文档里文本框里的内容应该怎么做???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
langhey
2008-06-02
打赏
举报
回复
这些我都试过,但还是没有办法找到文本框里的东西,只能找到文本里的内容。用超链接,也只能找到文本里的,文本框里的也找不到
kugoo_2006
2008-05-28
打赏
举报
回复
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");
以前我用delphi开发的时候,经常用word中的录制宏,看看他里边是怎么写?可以试试
算法技术手册 - 中文版
《算法技术手册》内容简介:开发健壮的软件需要高效的算法,然后程序员们往往直至问题发生之时,才会去
求助
于算法。《算法技术手册》讲解了许多现有的算法,可用于解决各种问题。通过阅读它,可以使您学会如何选择和...
教师回应幼儿
求助
行为的问题及对策研究
这是由于在
求助
过程中,幼儿可以和被
求助
者,多为教师进行互动,可以使幼儿学会许多解决问题的技巧,最终也就可以促进幼儿社会性的发展。本文选择3岁至6岁幼儿为研究对象,采用观察法,进行探究幼儿在幼儿园里的
求助
...
java/php/python在线
求助
救援网站vue+elementui
本系统前后台的前端通过Vue开发,线上部署将Vue代码构建成合成压缩后的代码到dist...本南天
求助
系统是针对目前南天
求助
的实际需求,从实际工作出发,对过去的南天
求助
系统存在的问题进行分析,完善施助者的使用体会。
基于微信小程序的校园欺凌
求助
系统 计算机毕业设计源码69173
该系统利用微信这一中国最广泛使用的社交平台作为载体,通过小程序的形式提供了匿名报告功能,确保了用户...后端则基于Spring Boot框架构建,实现用户管理、紧急
求助
管理、
求助
报告管理、事件跟踪管理等核心功能.....
springboot留守儿童学习
求助
系统-计算机毕设 附源码35289
留守儿童学习
求助
系统主要功能模块包括系统首页、系统用户管理(管理员、系统用户)、资源管理(新闻列表、新闻分类)、公告管理、模块管理(留言信息、留守儿童、
求助
信息、捐款信息、确认捐出),采取面对对象的...
Java EE
67,538
社区成员
225,852
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章