欢迎访问binary的Blog   虚心使人进步,骄傲使人落后。

          W3CHINA Blog首页    管理页面    写新日志    退出



«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


登录

用户名称:
登陆密码:
密码保存:


联系我
email: binaryluo(at)gmail.com

我的分类

日志更新

最新评论

留言板

Blog信息

 
blog名称:二进制-虚心使人进步,骄傲使人落后。
日志总数:42
评论数量:370
留言数量:88
访问次数:640081
建立时间:2005年2月19日




[C# / .NET]C#操作Word
原创空间,  软件技术,  电脑与网络

binaryluo 发表于 2006/2/18 12:36:29

     C#操作Office套件的时候都需要用到COM组件,需要在项目里添加相应的COM组件。用C#在Word里查找指定关键字的方法有两种:Selection对象和Range对象。      Selection对象的用法: • // C# • internal void SelectionFind() • { • string strFind = "find me"; • Word.Find fnd = ThisApplication.Selection.Find; • fnd.ClearFormatting(); • fnd.Text = strFind; • object missingValue = Type.Missing; • • if (fnd.Execute(ref missingValue, ref missingValue, • ref missingValue, ref missingValue, ref missingValue, • ref missingValue, ref missingValue, ref missingValue, • ref missingValue, ref missingValue, ref missingValue, • ref missingValue, ref missingValue, ref missingValue, • ref missingValue)) • { • MessageBox.Show("Text found."); • } • else • { • MessageBox.Show("The text could not be located."); • } }           Range对象的用法:      // C# internal void RangeFind() {        Word.Range rng = ThisDocument.Paragraphs[2].Range;        Word.Find fnd = rng.Find;        fnd.ClearFormatting();        object missingValue = Type.Missing;        object findStr = "find me";        if (fnd.Execute(ref findStr, ref missingValue, ref missingValue,                                ref missingValue, ref missingValue, ref missingValue,                                 ref missingValue, ref missingValue, ref missingValue,                                 ref missingValue, ref missingValue, ref missingValue,                                 ref missingValue, ref missingValue, ref missingValue))        {                 MessageBox.Show("Text found.");        }        else        {                 MessageBox.Show("Text not found.");         }                 rng.Select();         }      下面是自己写的一段完整的代码,功能:在一个指定的Word文档中查找指定的关键字,并打印出包含该关键字的段落。使用的Range对象。 using System; using System.Collections; using Word; namespace SearchWordDoc {     /// <summary>     /// SearchWordDoc's summary     /// </summary>     public class SearchWordDoc     {         // search word in document.         // strName is the document name which is searched.         // strFind is the key word or phrase.         // return the match paragraphs.         public ArrayList swd(string strFName, string strFind)         {             ArrayList textsFound = new ArrayList();  // matched texts             object missingValue = Type.Missing;             Word.ApplicationClass wdApp = null;      // Word Application object                         try             {                 object fName = strFName as object;                 wdApp = new ApplicationClass();      // create a Word application object                 Word.Document wdDoc = wdApp.Documents.Open(ref fName, ref missingValue,                     ref missingValue, ref missingValue, ref missingValue,                     ref missingValue, ref missingValue, ref missingValue,                     ref missingValue, ref missingValue, ref missingValue,                     ref missingValue, ref missingValue, ref missingValue,                     ref missingValue, ref missingValue); // open a Word object                                 // the Word object has paragraphs or not                 if (wdDoc.Paragraphs != null && wdDoc.Paragraphs.Count > 0)                 {                     int count = wdDoc.Paragraphs.Count;  // the number of doc paragraphs                     Word.Range rng;                      // Word.Range object                     Word.Find fnd;                       // Word.Find object                     Console.WriteLine("There are {0} paragraphs in document '{1}'.", count, strFName);                     for (int i = 1; i <= count; ++ i)    // search key words in every paragraphs                     {                         rng = wdDoc.Paragraphs[i].Range;                         fnd = rng.Find;                         fnd.ClearFormatting();                         fnd.Text = strFind;                         if (fnd.Execute(ref missingValue, ref missingValue,                             ref missingValue, ref missingValue, ref missingValue,                             ref missingValue, ref missingValue, ref missingValue,                             ref missingValue, ref missingValue, ref missingValue,                             ref missingValue, ref missingValue, ref missingValue,                             ref missingValue))                         {                             // if find the matched paragrahps, add it into the textsFound ArrayList.                             textsFound.Add("[" + i.ToString() + "] " + wdDoc.Paragraphs[i].Range.Text.Trim());                         }                     }                 }             }             catch (NullReferenceException e)             {                 Console.WriteLine(e.ToString());                 wdApp.Quit(ref missingValue, ref missingValue, ref missingValue);             }             catch (Exception e)             {                 Console.WriteLine(e.ToString());                 wdApp.Quit(ref missingValue, ref missingValue, ref missingValue);             }             // release the Word application object             wdApp.Quit(ref missingValue, ref missingValue, ref missingValue);             return textsFound;         }         // Display usage         public void usage()         {             Console.WriteLine("\nUsage: SearchWordDoc doc_name string_found " +                 "[start_paragraph_NO.]\n\t\t     [end_paragraph_NO.]");         }         // Print the result         public void printText(ArrayList lst)         {             if (lst == null)             {                 Console.WriteLine("Error: Null ArrayList.\n");                 return;             }             int len = lst.Count;             for (int i = 0; i < len; ++ i)             {                 Console.WriteLine("\t" + lst[i] as string);             }             Console.WriteLine("\nThere are {0} records.", len);         }         // Function Main         public static void Main(string[] args)         {             ArrayList textsFound = new ArrayList();             SearchWordDoc sobject = new SearchWordDoc();             switch (args.Length)             {                 case 0:                 case 1:                     sobject.usage();                     break;                 case 2:                     textsFound = sobject.swd(args[0], args[1]);                     Console.WriteLine("Search Result:\n");                     sobject.printText(textsFound);                     break;                 default:                     sobject.usage();                     break;             }         }     } } C#对Word的操作和对Excel等的操作方法很相似。具体的对象说明可以参考.NET SDK。 


阅读全文(2752) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144769174 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号