it步行者

天地间有我在行走。
posts - 11, comments - 87, trackbacks - 1, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

/******************************************************************************************
 *【Author】:itwalker
 *【Date】:2005年7月8日
 *【Notice】:
 *1、本文为原创技术文章,首发博客园个人站点(itwalker.cnblogs.com),转载和引用请注明作者及出处。
 *2、本文必须全文转载和引用,任何组织和个人未授权不能修改任何内容,并且未授权不可用于商业。
 *3、本声明为文章一部分,转载和引用必须包括在原文中。
 ******************************************************************************************/

用编程的方式根据对象模型很容易实现在Word、Excel文档中搜索文本,在PowerPoint里面也同样如此,使用对象模型有助于我们了解office的文档结构。

搜索的思路和方法基本是一样的,用PowerPoint应用程序对象打开指定的文档,用文档对象获取文档,再使用合适的对象将文档分割成搜索范围适中的对象进行搜索。

打开PowerPoint的VBA帮助文档VBAPP10.CHM,根据对象模型图,很容易找到我们需要的几个集合和对象:Application、Presentations、Presentation、Slides、Slide、TextFrame、TextRange。其中Presentation代表一个 PowerPoint 文档,Slide表示PowerPoint文档中的单张幻灯片,TextFrame是幻灯片上的文本框,TextRange是文本框中的文本。

打开PowerPoint文档:

string filename="";

PowerPoint.Application pa
=new PowerPoint.ApplicationClass();
PowerPoint.Presentation pp
=pa.Presentations.Open(filename,
                Microsoft.Office.Core.MsoTriState.msoTrue,
                Microsoft.Office.Core.MsoTriState.msoFalse,
                Microsoft.Office.Core.MsoTriState.msoFalse);

Open()方法的第三个参数在帮助文档中的说明如下:
Untitled     可选。MsoTriState 类型。指定文件是否有标题。
因为是Untitled,所以按照上面的代码,打开文档之后才能引用PowerPoint文档的标题,如果不想使用标题,就要把枚举msoFalse改成msoTrue。
搜索文本:
string[] strKeyWordList={};    //要搜索的文本
PowerPoint.TextRange oText;
foreach(PowerPoint.Slide slide in pp.Slides)
{
    
foreach(PowerPoint.Shape shape in slide.Shapes)
    
{
        
foreach(string strKeyWord in strKeyWordList)
        
{
            oText
=null;
            oText
=shape.TextFrame.TextRange.Find(strKeyWord,0,Microsoft.Office.Core.MsoTriState.msoFalse,Microsoft.Office.Core.MsoTriState.msoTrue);
            
if (oText!=null)
            
{
                MessageBox.Show(
"文档中包含指定的关键字 "+strKeyWord+" !","搜索结果",MessageBoxButtons.OK);
                
continue;
            }

        }

    }

}

Feedback

#1楼  回复 引用   

2005-07-08 16:06 by kwklover
@it步行者
不错,鼓励一下,
不过还是
希望你能写些全面,系统和深入一点的文章哦

#2楼  回复 引用   

2005-07-08 17:42 by 天天编程[未注册用户]
请问楼主!!!
有没有做过在powerPoint里面插入图片,和字段的例子!
希望给我答复!!!
谢谢
我邮箱xiajun_loves@163.com

#3楼[楼主]  回复 引用 查看   

2005-07-09 15:50 by itwalker      
感谢kwklover。
这里写的技术文章都是对平时工作的总结,整理下思路,便于今后回顾和参考,如果对别人也有用就是意外收获了,不过,IT这条路是需要不断总结和学习提高的,你说的对,应该在技术上更全面系统和深入。

#4楼[楼主]  回复 引用 查看   

2005-07-09 15:58 by itwalker      
关于在PowerPoint里面插入图片和字段,以前我没有做过,但是有了对象模型,这不是难事,不知道你要我跟你联系是想了解如何去实现还是什么考虑?我刚才参考对象模型简单试了一下插入文字,以下是主要代码片断:

PowerPoint.Application pa=new PowerPoint.ApplicationClass();
PowerPoint.Presentation pp=pa.Presentations.Add(
Microsoft.Office.Core.MsoTriState.msoFalse);
PowerPoint.Slide oslide=pp.Slides.Add(
pp.Slides.Count+1,PowerPoint.PpSlideLayout.ppLayoutBlank);
oslide.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,100,100,200,50).TextFrame.TextRange.Text="this is a example!";
string strFileName=Environment.CurrentDirectory.TrimEnd('\\')+
"\\test.ppt";
pp.SaveAs(strFileName,(PowerPoint.PpSaveAsFileType.ppSaveAsPresentation),(Microsoft.Office.Core.MsoTriState.msoFalse));

这个过程就是:实例化一个PowerPoint应用程序对象,新建一个PowerPoint文档,生成一个幻灯片slide对象,加入文本框,设置文本框里面的内容,保存在当前程序运行目录。运行通过。

#5楼  回复 引用   

2005-07-09 19:24 by ocean[未注册用户]
不过这个样子如果搜索的文档多了,效率不能保证,从一个文档中搜倒是没有问题。不过代码很好,平时操作word比较多,还没操作过ppt

#6楼[楼主]  回复 引用 查看   

2005-07-09 22:18 by itwalker      
这是利用对象模型在单个文档中搜索,如果这样搜索批量文档的话,需要依次打开关闭要搜索的文档,如ocean所说,效率不能保证,不知道ocean对批量搜索文档是如何进行处理的,有没有好的方法?

#7楼  回复 引用   

2007-01-15 11:24 by yicone[未注册用户]
我用的一个批量搜索的办法是,将每个Excel文件的读入字节数组,存入数据库的Content字段;同时将Excel文件另存为文本文件,存入数据库中的Text字段,查询的时候是用SQL语句对Text字段进行模糊查询