C#操作Word(转)

来源:互联网 发布:知乎我的答案怎么删除 编辑:程序博客网 时间:2024/05/16 08:52

 [原创]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。

 

原创粉丝点击