用 C# 实现 Word 的搜索功能

本文介绍了如何使用C#调用Word的Wildcards搜索功能,并将结果存入数据库。通过JACOB接口操作Word,利用Selection或Range接口的Find属性实现搜索。文章还详细阐述了获取搜索结果、实现Find Next功能的方法,以及C#调用COM组件的注意事项,建议开发者了解Office对象模型以提升开发效率。
摘要由CSDN通过智能技术生成

一个项目要求用 Java 调用 Word 的 Wildcards 搜索功能,并将搜索的全部结果存入数据库。该项目使用 JACOB 作为操作的 Word 的接口,JACOB 是 Java 和 COM 的“桥”。

我对 Java 不熟,也没时间研究如何使用 JACOB,于是我使用 C# 调用 Office Component,反正 JACOB 是基于 JNI 调用 COM,我只要找到解决问题的方法即可。让项目组熟悉 Java 和 JACOB 的同事改写一份即可,这个主意我不错,开工吧。

1、如何调用 Wildcards 搜索

Application 和 Document 接口没有提供 Find 或 Serach 方法,要实现搜索的功能,我们需要使用 Selection 或 Range 接口,这两个接口提供了 Find 属性(Property)。

实际上,Word 提供了一个名称叫 Find 接口,Range 对象的 Find 属性就是该类型的,搜索功能主要由该接口实现。针对我们要实现的功能,主要设置 Forward、MatchWildcards、Text 三个属性,然后调用 Execute 方法,如果找到了匹配的结果则返回 true,否则返回 false。

2、如何取得搜索结果

Wildcards 搜索的“表达式”有些类似于“正则表达式”,因此如何取得搜索到的结果成了新问题,这也是同事迟迟没有搞定的。

花了很多时间写测试代码,搜索 MSDN 中关于 Range 对象和 Find 对象的帮助,最后终于找到了下面这段话。真相大白于天下!!!

image

当我们使用 Range 对象进行搜索时,找到第一个匹配的字符串时,“源 Range 对象”将被 Redefined,也就是说,搜索的结果是存储在“用来搜索用的 Range 对象中”

3、如何实现搜索下一条(Find Next)

解决了搜索结果的问题,我们又遇到了新的问题。既然用来搜索用的 Range 对象已经改变,我们如何实现 Find Next 功能???

很简单,从匹配字符串的“下一个字符”继续搜索。说起来容易,如何实现呢?

我们是使用 Document 对象的 Range 方法来取得 Range 对象的,那么,只需看看 Range 的原型即可:

image

需要注意的是,省略 Start 参数时,默认从 Document 的第一个字符开始;省略 End 参数时,默认到 Document 的最后一个字符结束。

4、C# 调用 COM 的注意内容

Office Component 对象中的方法,通常提供 N 个参数,基本上都是 Object 的 ref 类型,给开发带来很多不便。还好,在 .Net 中提供了 Type.Missing 字段(Field),不想传递值的参数(Argument)使用该字段即可。

5、VB.NET 和 C# 的选择

我对 C# 熟悉一些,使用 .Net 之后几乎所有的测试代码都用 C# 完成。在历经了 N 次操作 Office Component 的痛苦之后,我强烈推荐大家使用 VB.NET 操作 Office Component。反正 .Net 支持多语言,我们完全可以使用 VB.NET 写好 Class Library 在 C# 中调用。

以下是我使用 Reflector 对 VB.NET 代码的分析,编译器帮我们做了很多工作(请注意反编译后的第 5~7 行代码),真的很方便!!!

ContractedBlock.gif ExpandedBlockStart.gif VB.NET 的测试代码
 1ExpandedBlockStart.gifContractedBlock.gifPrivate Function Search()Function Search(ByVal key As StringAs String
 2InBlock.gif    Dim sbResult As New StringBuilder()
 3InBlock.gif    Dim isFind As Boolean

 4InBlock.gif    Dim fileName As String
 5InBlock.gif
 6InBlock.gif    fileName = ""

 7InBlock.gif    isFind = True
 8InBlock.gif
 9InBlock.gif    Dim
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值