`
caozuiba
  • 浏览: 899763 次
文章分类
社区版块
存档分类
最新评论

C#编程实现在Excel文档中搜索文本

 
阅读更多

有了在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程序设计者出于什么样的考虑?

分享到:
评论

相关推荐

    C#编程实现Excel文档中搜索文本内容的方法及思路

    有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事。

    C#基础实例

    C#中利用mediaplayer打造mp3播放器 C#打造一个平滑的进度条 C#编程实现在Excel文档中搜索文本 C#设计带图标和自定义颜色的ListBox net编程习惯 用Visual C#实现文件下载 等等...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例086 在richtextbox控件中替换文本文字 141 实例087 利用richtextbox控件实现文字定位与标示 142 实例088 将数据表中的字段添加到combobox控件中 143 实例089 对listbox控件中的数据进行排序 145 实例090 listbox...

    Visual C# .NET精彩编程实例集锦

    实例26 如何以流式方式读写文本文件 实例27 如何直接打印文件 实例28 如何操作帮助文件 实例29 如何操作Word文件 实例30 如何操作Excel文件 实例31 如何播放MP3文件 实例32 如何播放VCD文件 实例33 如何播放DVD文件 ...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    第1篇 C#编程基础篇 第1章 C#开发环境的使用 2 1.1 Visual Studio开发环境的安装与配置 3 实例001 配置合适的Visual Studio 2012开发环境 3 实例002 设置程序代码行号 4 实例003 使开发环境全屏显示 5 实例004 根据...

    ASP.NET(c#) 从零动态生成Word文件(用程序设置文本段落格式、填充数据)

    ASP.NET(c#) 对一个空白的word文件编程,生成图文并茂的Word文件。可以用程序设置文本段落格式、填充数据、插入图片、插入另一个word或excel文件(企业版支持) 不是服务器端自动化。 使用的是PageOffice,除了提供...

    C#.net_经典编程例子400个

    273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...

    《Visual C# .NET精彩编程实例集锦》配套光盘文件【全】

    《Visual C# .NET精彩编程实例集锦》配套光盘文件【全】 目录回到顶部↑ 前言 第1章 控件操作 实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例...

    C#在Excel表格中插入、编辑和删除批注

    为文档添加必要的批注可以给文档使用者提供重要的提示信息,下面的示例中,将介绍通过C#编程语言来给Excel表格中的指定单元格内容添加批注,此外,对于已有的批注,如果需要修改,我们也可以进行编辑或者删除批注。...

    C#开发经验技巧宝典

    0778 C#编程实现Windows XP风格的界面 471 0779 用C#实现文件查找功能 473 0780 如何序列化对象 473 0781 如何实现特殊形状的窗体 474 0782 如何移动正在使用的文件 474 0783 如何实现类似QQ的程序界面 ...

    免费版.NET Excel组件_Free Spire.XLS for .NET 8.3

    使用 Free Spire.XLS for .NET,开发人员可以在 .NET 应用程序中快速对 Excel 文档进行各种编程操作,如根据模板创建新的 Excel 文档,编辑现有 Excel 文档以及对 Excel 文档进行转换等。Free Spire.XLS for .NET 是...

    明日科技C#开发入门及项目实战

    实例086 在richtextbox控件中替换文本文字 实例087 利用richtextbox控件实现文字定位与标示 实例088 将数据表中的字段添加到combobox控件中 实例089 对listbox控件中的数据进行排序 实例090 listbox控件拒绝添加重复...

    C#程序开发范例宝典(第2版).part02

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    C#程序开发范例宝典(第2版).part08

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

Global site tag (gtag.js) - Google Analytics