C#操作Word(轉)

 [原創]C#操作Word

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;
            }
        }
    }
} // End

       C#對Word的操作和對Excel等的操作方法很相似。具體的對象說明可以參考.NET SDK。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章