有了在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文档:
objectfilename="";
objectMissingValue=Type.Missing;
stringstrKeyWord="";//指定要搜索的文本,如果有多个,则声明string[]
Excel.Applicationep=newExcel.ApplicationClass();
Excel.Workbookew=ep.Workbooks.Open(filename.ToString(),MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue,MissingValue,MissingValue,
MissingValue);
然后准备遍历Excel工作表:
Excel.Worksheetews;
intiEWSCnt=ew.Worksheets.Count;
inti=0,j=0;
Excel.RangeoRange;
objectoText=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。
第一种方法实现了,再看看第二种方法。这种方法除了要遍历工作表,还要对工作表使用区域的行和列进行遍历。其它一样,只对遍历说明,代码如下:
boolblFlag=false;
intiRowCnt=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程序设计者出于什么样的考虑?
分享到:
相关推荐
有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事。
C#中利用mediaplayer打造mp3播放器 C#打造一个平滑的进度条 C#编程实现在Excel文档中搜索文本 C#设计带图标和自定义颜色的ListBox net编程习惯 用Visual C#实现文件下载 等等...
C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...
实例086 在richtextbox控件中替换文本文字 141 实例087 利用richtextbox控件实现文字定位与标示 142 实例088 将数据表中的字段添加到combobox控件中 143 实例089 对listbox控件中的数据进行排序 145 实例090 listbox...
实例26 如何以流式方式读写文本文件 实例27 如何直接打印文件 实例28 如何操作帮助文件 实例29 如何操作Word文件 实例30 如何操作Excel文件 实例31 如何播放MP3文件 实例32 如何播放VCD文件 实例33 如何播放DVD文件 ...
第1篇 C#编程基础篇 第1章 C#开发环境的使用 2 1.1 Visual Studio开发环境的安装与配置 3 实例001 配置合适的Visual Studio 2012开发环境 3 实例002 设置程序代码行号 4 实例003 使开发环境全屏显示 5 实例004 根据...
ASP.NET(c#) 对一个空白的word文件编程,生成图文并茂的Word文件。可以用程序设置文本段落格式、填充数据、插入图片、插入另一个word或excel文件(企业版支持) 不是服务器端自动化。 使用的是PageOffice,除了提供...
273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...
《Visual C# .NET精彩编程实例集锦》配套光盘文件【全】 目录回到顶部↑ 前言 第1章 控件操作 实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例...
为文档添加必要的批注可以给文档使用者提供重要的提示信息,下面的示例中,将介绍通过C#编程语言来给Excel表格中的指定单元格内容添加批注,此外,对于已有的批注,如果需要修改,我们也可以进行编辑或者删除批注。...
0778 C#编程实现Windows XP风格的界面 471 0779 用C#实现文件查找功能 473 0780 如何序列化对象 473 0781 如何实现特殊形状的窗体 474 0782 如何移动正在使用的文件 474 0783 如何实现类似QQ的程序界面 ...
使用 Free Spire.XLS for .NET,开发人员可以在 .NET 应用程序中快速对 Excel 文档进行各种编程操作,如根据模板创建新的 Excel 文档,编辑现有 Excel 文档以及对 Excel 文档进行转换等。Free Spire.XLS for .NET 是...
实例086 在richtextbox控件中替换文本文字 实例087 利用richtextbox控件实现文字定位与标示 实例088 将数据表中的字段添加到combobox控件中 实例089 对listbox控件中的数据进行排序 实例090 listbox控件拒绝添加重复...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...