找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 894|回复: 10

[翻译文档] C#实此刻 Word文档中搜刮 文本

[复制链接]

该用户从未签到

1

主题

1

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-5-31 13:33:45 | 显示全部楼层 |阅读模式
   在word利用法式中搜刮和调换文本是举手之劳的工作,经由过程word的对象模子,我们也可以应用编程方法来实现。

   Word的对象模子有比拟具体的辅助文档,放在 Office 安装法式目次,office 2003是在Program FilesMicrosoft OfficeOFFICE112052下,文档自己是为VBA供给的,在这个目次下还可以看到所有的office利用法式的VBA辅助。

   打开VBAWD10.CHM,看到word的对象模子,依据以往的应用经验,很轻易在Document对象下找到Content属性,该属性会返回一个文档文字部门的Range对象,从这个对象中不难取到所有的文档内容,再用string的IndexOf()方式很轻易到达目的。
object filename=""; //要打开的文档路径
string strKey=""; //要搜刮的文本
object MissingValue=Type.Missing;

Word.Application wp=new Word.ApplicationClass();
Word.Document wd=wp.Documents.Open(ref filename,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue);

if (wd.Content.Text.IndexOf(strKey)>=0)
{
MessageBox.Show("文档中包括指定的要害字!","搜刮成果",MessageBoxButtons.OK);
}
else
{
MessageBox.Show("文档中没有指定的要害字!","搜刮成果",MessageBoxButtons.OK);
}

   不外,这种做法是很委曲的,对小文档来说,不存在题目,对超长超年夜的文档来说,如许的实现方式已经暗埋bug了,并且是法式级的bug,由于正常的测试会很难发明题目,在应用中导致法式呈现什么样的成果也很难量化描写。

   实在,在word中已经供给了可以用作搜刮的对象Find,在对象模子上也比拟轻易找到,对应的阐明是如许的:该对象代表查找操纵的履行前提。Find 对象的属性和方式与“调换”对话框中的选项一致。从模子上看,Find对象是Selection的成员,从示例代码来看似乎也是Range的成员,查找Range的属性,公然如斯。于是修正上面的代码:
wd.Content.Find.Text=strKey;
if (wd.Content.Find.Execute(ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue))
{
MessageBox.Show("文档中包括指定的要害字!","搜刮成果",MessageBoxButtons.OK);
}
else
{
MessageBox.Show("文档中没有指定的要害字!","搜刮成果",MessageBoxButtons.OK);
}

   如许似乎也不是最好,由于我只要判定指定的文本是不是在文档中,而不须要知道它呈现了几回,假如有多个要搜刮的文本,莫非每次都进行全文档搜刮?假设我要搜刮的文本包括在文档中,最好的情形是在文档开首就包括我要查找的文本,最坏的情形是在文档的最后包括要查找的文本,假如每次取一部门文档进行判定,合适前提就停止本次搜刮,就可以避免每次搜刮全部文档了。模子中的PARagraphs对象此刻派上用处了,再修正一下代码:
int i=0,iCount=0;
Word.Find wfnd;

if (wd.Paragraphs!=null && wd.Paragraphs.Count>0)
{
iCount=wd.Paragraphs.Count;
for(i=1;i<=iCount;i++)
{
wfnd=wd.Paragraphs[i].Range.Find;
wfnd.ClearFormatting();
wfnd.Text=strKey;
if (wfnd.Execute(ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue))
{
MessageBox.Show("文档中包括指定的要害字!","搜刮成果",MessageBoxButtons.OK);
break;
}
}
}

该用户从未签到

0

主题

8

帖子

7

积分

LV.1

Rank: 1

积分
7
QQ
发表于 2016-6-28 15:43:52 | 显示全部楼层
楼主辛苦了。。回帖是一种美德

该用户从未签到

1

主题

12

帖子

13

积分

LV.1

Rank: 1

积分
13
QQ
发表于 2016-7-1 16:59:16 | 显示全部楼层
楼主辛苦了,帮楼主顶起来

该用户从未签到

2

主题

39

帖子

6

积分

LV.1

Rank: 1

积分
6
QQ
发表于 2016-9-29 15:28:27 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

0

主题

9

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-10-3 16:18:28 | 显示全部楼层
增强现实,增强现实,增强现实。重要的事情说三遍

该用户从未签到

0

主题

16

帖子

15

积分

LV.1

Rank: 1

积分
15
QQ
发表于 2016-10-10 06:09:51 | 显示全部楼层
竟然还有零回复,给我消失

该用户从未签到

0

主题

14

帖子

14

积分

LV.1

Rank: 1

积分
14
QQ
发表于 2016-12-18 14:07:05 | 显示全部楼层
嗯,很不错的样子!!

该用户从未签到

3

主题

46

帖子

21

积分

LV.1

Rank: 1

积分
21
QQ
发表于 2016-12-19 01:27:51 | 显示全部楼层
这里竟然还有这么一个关于AR的网站的收藏了

该用户从未签到

0

主题

17

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2017-4-5 03:19:45 | 显示全部楼层
看帖怎么能不会呢??

该用户从未签到

0

主题

49

帖子

43

积分

LV.1

Rank: 1

积分
43
QQ
发表于 2017-4-13 00:54:54 | 显示全部楼层
楼主写的很不错,关于AR的知识受教了
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表