找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 436|回复: 9

[翻译文档] C#编程实此刻 Excel文档中搜刮 文本

[复制链接]

该用户从未签到

2

主题

14

帖子

17

积分

LV.1

Rank: 1

积分
17
QQ
发表于 2016-5-31 13:34:31 | 显示全部楼层 |阅读模式
有了在Word文档中编程实现搜刮文本的经验,在Excel中实现这个功效也并驳诘事。

   打开Excel的VBA辅助,查看Excel的对象模子,很轻易找到完成这个功效须要的几个聚集和对象:Application、Workbooks、Workbook、Worksheets还有Worksheet和Range。Application创立Excel利用,Workbooks打开Excel文档,Workbook获得Excel文档工作薄,Worksheets操纵工作表聚集,Worksheet获得单个工作表。

   搜刮的思绪对应上述聚集和对象,可以如许表述:要搜刮的文本可能存在Excel文档傍边的某个工作表上,搜刮应当遍历目的Excel文件的每个工作表中的有用区域,假如找到,则退出本次搜刮,假如没有找到,则持续搜刮直到完本钱次搜刮。

   跟Word对象模子纷歧样的是,Excel对象模子没有供给Find对象,不外没有关系,可以经由过程两种方式来实现,一个是经由过程Range对象的Find()方式来实现,别的一个比拟麻烦,取得工作表Worksheet的有用区域UsedRange之后,遍历该Range对象中的所有行列。现实开辟中,用第二种方式时发明了一个特殊的现象,所以第二种方式也预备具体记述一下。

   第一步,打开Excel文档:
object filename="";
object MissingValue=Type.Missing;
string strKeyWord=""; //指定要搜刮的文本,假如有多个,则声明string[]
Excel.Application ep=new Excel.ApplicationClass();
Excel.Workbook ew=ep.Workbooks.Open(filename.ToString(),MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue);

   然后预备遍历Excel工作表:
Excel.Worksheet ews;
int iEWSCnt=ew.Worksheets.Count;
int i=0,j=0;
Excel.Range oRange;
object oText=strKeyWord.Trim().ToUpper();

for(i=1;i<=iEWSCnt;i++)
{
ews=null;
ews=(Excel.Worksheet)ew.Worksheets[i];
oRange=null;
(Excel.Range)oRange=((Excel.Range)ews.UsedRange).Find(
oText,MissingValue,MissingValue,
MissingValue,MissingValue,Excel.XlSeARchDirection.xlNext,
MissingValue,MissingValue,MissingValue);
if (oRange!=null && oRange.Cells.Rows.Count>=1 && oRange.Cells.Columns.Count>=1)
{
MessageBox.Show("文档中包括指定的要害字!","搜刮成果",MessageBoxButtons.OK);
break;
}
}

   这里要说两个值得留意的处所。一个是遍历工作表的索引,不是从0开端,而是从1开端;别的一个是Find方式的第六个参数SearchDirection,指定搜刮的标的目的,辅助文档中说这个参数是可选项,可是我用MissingValue如论若何编译不克不及经由过程,不知什么原因,于是显式指定它的默认值xlNext。

   第一种方式实现了,再看看第二种方式。这种方式除了要遍历工作表,还要对工作表应用区域的行和列进行遍历。其它一样,只对遍历阐明,代码如下:
bool blFlag=false;
int iRowCnt=0,iColCnt=0,iBgnRow,iBgnCol;

for(m=1;m<=iEWSCnt;m++)
{
ews=(Excel.Worksheet)ew.Worksheets[m];
iRowCnt=0+ews.UsedRange.Cells.Rows.Count;
iColCnt=0+ews.UsedRange.Cells.Columns.Count;
iBgnRow=(ews.UsedRange.Cells.Row>1)?
ews.UsedRange.Cells.Row-1:ews.UsedRange.Cells.Row;
iBgnCol=(ews.UsedRange.Cells.Column>1)?
ews.UsedRange.Cells.Column-1:ews.UsedRange.Cells.Column;

for(i=iBgnRow;i<iRowCnt+iBgnRow;i++)
{
for(j=iBgnCol;j<iColCnt+iBgnCol;j++)
{
strText=((Excel.Range)ews.UsedRange.Cells[i,j]).Text.ToString();
if (strText.ToUpper().IndexOf(strKeyWord.ToUpper())>=0)
{
MessageBox.Show("文档中包括指定的要害字!","搜刮成果",MessageBoxButtons.OK);
}
}
}
}
   显然这种方式比第一种繁琐得多,不外这里有一个关于遍历单位格的索引很特殊的处所,当工作表中的应用区域UsedRange为单行单列的时辰,对UsedRange中的单位格遍历肇端索引值为1,为多行多列的时辰,肇端索引值为0,不知这是Excel法式设计者出于什么样的斟酌?

该用户从未签到

1

主题

15

帖子

12

积分

LV.1

Rank: 1

积分
12
QQ
发表于 2016-8-26 16:15:27 | 显示全部楼层
增强现实,增强现实,增强现实。重要的事情说三遍

该用户从未签到

0

主题

43

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-9-10 07:21:32 | 显示全部楼层
楼主写的很不错,关于AR的知识受教了

该用户从未签到

2

主题

15

帖子

13

积分

LV.1

Rank: 1

积分
13
QQ
发表于 2016-9-11 14:02:55 | 显示全部楼层
嗯,很不错的样子!!

该用户从未签到

1

主题

25

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-9-11 16:05:33 | 显示全部楼层
这里竟然还有这么一个关于AR的网站的收藏了

该用户从未签到

1

主题

54

帖子

49

积分

LV.1

Rank: 1

积分
49
QQ
发表于 2016-9-13 14:33:12 | 显示全部楼层
楼主辛苦了,帮楼主顶起来

该用户从未签到

0

主题

7

帖子

7

积分

LV.1

Rank: 1

积分
7
QQ
发表于 2016-10-8 02:33:59 | 显示全部楼层
增强现实希望发展越来越好

该用户从未签到

3

主题

22

帖子

23

积分

LV.1

Rank: 1

积分
23
QQ
发表于 2018-10-1 14:19:31 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

1

主题

54

帖子

48

积分

LV.1

Rank: 1

积分
48
QQ
发表于 2019-1-11 09:20:51 | 显示全部楼层
楼主辛苦了。。回帖是一种美德

该用户从未签到

2

主题

14

帖子

17

积分

LV.1

Rank: 1

积分
17
QQ
发表于 2019-1-14 10:25:18 | 显示全部楼层
竟然还有零回复,给我消失
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

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

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