用C#實(shí)現(xiàn)在PowerPoint文檔中搜索文本

字號:

用編程的方式根據(jù)對象模型很容易實(shí)現(xiàn)在Word、Excel文檔中搜索文本,在PowERPoint里面也同樣如此,使用對象模型有助于我們了解Office的文檔結(jié)構(gòu)。
    搜索的思路和方法基本是一樣的,用PowerPoint應(yīng)用程序?qū)ο蟠蜷_指定的文檔,用文檔對象獲取文檔,再使用合適的對象將文檔分割成搜索范圍適中的對象進(jìn)行搜索。
    打開PowerPoint的VBA幫助文檔VBAPP10.CHM,根據(jù)對象模型圖,很容易找到我們需要的幾個(gè)集合和對象:Application、Presentations、Presentation、Slides、Slide、TextFrame、TextRange。其中Presentation代表一個(gè) 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()方法的第三個(gè)參數(shù)在幫助文檔中的說明如下:
    Untitled 可選。MsoTriState 類型。指定文件是否有標(biāo)題。
    因?yàn)槭荱ntitled,所以按照上面的代碼,打開文檔之后才能引用PowerPoint文檔的標(biāo)題,如果不想使用標(biāo)題,就要把枚舉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("文檔中包含指定的關(guān)鍵字 "+strKeyWord+" !","搜索結(jié)果",MessageBoxButtons.OK);
     continue;
     }
     }