C#使用COM搜索本地word文档关键字

  1        /// <summary>
  2        /// 检索根目录下的子目录及其所有文件,并在datagridview中显示文档名称及路径--递归调用
  3        /// </summary>
  4        /// <param name="rootPath">根目录</param>
  5        /// <param name="strKey">关键字包</param>
  6         private void GetAllFiles(string rootPath,List<string> strKey)
  7         {
  8               DirectoryInfo dir = new DirectoryInfo(rootPath);
  9               string[] dirs = System.IO.Directory.GetDirectories(rootPath);//得到所有子目录
 10              foreach (string di in dirs)
 11              {
 12                  GetAllFiles(di,strKey);
 13              }
 14             FileInfo[] files = dir.GetFiles("*.doc"); //查找文件        
 15             //遍历每个word文档            
 16             foreach (FileInfo fi in files)
 17             {
 18                 string filename = fi.Name;
 19                 string filePath = fi.FullName;
 20                 object filepath = filePath;
 21                 filename = SearchDoc.SearchInDoc(filepath, strKey, filename); //调用检索文档关键字的方法,并返回检索出的文档名称
 22                 if (filename != "")
 23                 {
 24                     dtBGMC.Rows.Add(filename, filepath); //datagridview逐行显示检索出来的结果
 25                 }
 26             }
 27         }
 28 
 29 
 30 
 31 
 32         /// <summary>
 33         /// search in a DOC file(查询DOC文件的内容)
 34         /// </summary>
 35         /// <param name="filepath">文档路径</param>
 36         /// <param name="strKey">要搜索的关键字数组</param>
 37         /// <param name="filename">文档名称</param>
 38         /// <returns></returns>
 39         public static string SearchInDoc(object filepath, List<string> strKey, string filename)
 40         {
 41             string KeyInfilename = "";
 42             object MissingValue = System.Reflection.Missing.Value;//Type.Missing;  
 43             try
 44             {
 45                 wp = new Microsoft.Office.Interop.Word.ApplicationClass();
 46                 wd = wp.Documents.Open(ref filepath, ref MissingValue,
 47                 ref readOnly, ref MissingValue,
 48                 ref MissingValue, ref MissingValue,
 49                 ref MissingValue, ref MissingValue,
 50                 ref MissingValue, ref MissingValue,
 51                 ref MissingValue, ref MissingValue,
 52                 ref MissingValue, ref MissingValue,
 53                 ref MissingValue, ref MissingValue);
 54                 Microsoft.Office.Interop.Word.Find wfnd;
 55 
 56                 if (wd.Paragraphs != null && wd.Paragraphs.Count > 0)
 57                 {
 58                     int keyscount = 0;
 59                     for (int i = 0; i < strKey.Count; i++) //循环关键字数组
 60                     {
 61                         for (int j = 1; j <= wd.Paragraphs.Count; j++)
 62                         {
 63                             wfnd = wd.Paragraphs[j].Range.Find;
 64                             wfnd.ClearFormatting();
 65                             wfnd.Text = strKey[i].ToString();
 66                             if (wfnd.Execute(ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue,
 67                               ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue,
 68                               ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue,
 69                               ref MissingValue, ref MissingValue, ref MissingValue))
 70                             {
 71                                 keyscount++;
 72                                 break;
 73                             }
 74                         }
 75                     }
 76                     if (keyscount == strKey.Count)
 77                     {
 78                         KeyInfilename = filename;
 79                     }
 80                 }
 81             }
 82             catch (Exception ex)
 83             {
 84                 throw new Exception(ex.Message);
 85             }
 86             finally
 87             {
 88                 if (wd != null)
 89                 {
 90                     wd.Close(ref MissingValue, ref MissingValue, ref MissingValue);
 91                     System.Runtime.InteropServices.Marshal.ReleaseComObject(wd);
 92                     wd = null;
 93                 }
 94 
 95                 if (wp != null)
 96                 {
 97                     wp.Quit(ref MissingValue, ref MissingValue, ref MissingValue);
 98                     System.Runtime.InteropServices.Marshal.ReleaseComObject(wp);
 99                     wp = null;
100                 }
101 
102                 GC.Collect();
103             }
104             return KeyInfilename;
105         }
106     }
107 }

 

posted @ 2014-04-28 18:00  goodgirlmia  阅读(1389)  评论(0编辑  收藏  举报
作者:goodgirlmia 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。