Пример класса для работы с MS WORD

Класс позволяющий довольно удобно использывать MS Word (позднее связывание):
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;
namespace MyOffice
{
    public class MyWord
    {
        private object internalWord;
        private object objCurDoc=null;
        private bool FAutoClose = false;
        private bool IsSuccesLast = false;
        public bool IsSucces
        {
            get { bool old = IsSuccesLast; IsSuccesLast = false; return old; }
        }
        public MyWord (bool AutoClose)
        {
            FAutoClose = AutoClose;
            try
            {
                Type objClassType;
                objClassType = Type.GetTypeFromProgID("Word.Application");
                internalWord = Activator.CreateInstance(objClassType);
                IsSuccesLast = true;
            }
            catch
            {
                IsSuccesLast = false;
            }
        }
        ~MyWord()
        {
            if ((FAutoClose) && (objCurDoc!=null))
            {
                this.CloseDoc();
            }
        }
        public bool CloseDoc()
        {
            try
            {
                //Close Active Document
                objCurDoc.GetType().InvokeMember("Close", BindingFlags.InvokeMethod,
                    null, objCurDoc, null);
                objCurDoc = null;
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool Quit()
        {
            try
            {
                object[] Parameters;
                Parameters = new Object[3];
                Parameters[0] = 0;
                Parameters[1] = 0;
                Parameters[2] = false;
                internalWord.GetType().InvokeMember("Quit", BindingFlags.SetProperty,
                    null, internalWord, Parameters);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool ShowWord(bool is_visible)
        {
            try
            {
                object[] Parameters;
                Parameters = new Object[1];
                Parameters[0] = is_visible;
                internalWord.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
                    null, internalWord, Parameters);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool OpenFile(string FileName)
        {
            try
            {
                object objDocs_Late = internalWord.GetType().InvokeMember(
                  "Documents", BindingFlags.GetProperty, null, internalWord, null);
                object[] Parameters;
                Parameters = new Object[1];
                Parameters[0] = FileName;
                objCurDoc = objDocs_Late.GetType().InvokeMember("Open",
                    BindingFlags.InvokeMethod, null, objDocs_Late, Parameters);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool SaveDocument()
        {
            if (objCurDoc == null) return false;
            try
            {
                objCurDoc.GetType().InvokeMember("Save",
                BindingFlags.InvokeMethod, null, objCurDoc, null);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool FindReplace(string findtext, string replacetext)
        {
            try
            {
                object[] Parameters;
                object objSelection = internalWord.GetType().InvokeMember(
                  "Selection", BindingFlags.GetProperty, null, internalWord, null);
                Parameters = new Object[2];
                Parameters[0] = 0;
                Parameters[1] = 0;
                objSelection.GetType().InvokeMember(
                  "SetRange", BindingFlags.InvokeMethod, null, objSelection, Parameters);
                object objFind = objSelection.GetType().InvokeMember(
                  "Find", BindingFlags.GetProperty, null, objSelection, null);
                Parameters = new Object[11];
                Parameters[0] = findtext; //find text
                Parameters[1] = false; //match case
                Parameters[2] = true; //match whole word
                Parameters[3] = false; //match wild card
                Parameters[4] = false; //match sounds like
                Parameters[5] = false; //match all word forms
                Parameters[6] = true; //forward
                Parameters[7] = false; //wrap
                Parameters[8] = false; //format
                Parameters[9] = replacetext; //replace text
                Parameters[10] = 2; //replace?
                objFind.GetType().InvokeMember("Execute",
                    BindingFlags.InvokeMethod, null, objFind, Parameters);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool SaveAs(string filename)
        {
            if (objCurDoc == null) return false;
            object[] Parameters = new Object[1];
            Parameters[0] = filename; //find text
            try
            {
                objCurDoc.GetType().InvokeMember("SaveAs",
                    BindingFlags.InvokeMethod, null, objCurDoc, Parameters);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool PrintPreview()
        {
            if (objCurDoc == null) return false;
            try
            {
                objCurDoc.GetType().InvokeMember("PrintPreview",
                    BindingFlags.InvokeMethod, null, objCurDoc, null);
                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool Print()
        {
            if (objCurDoc == null) return false;
            try
            {
                object[] Parameters = new Object[14];
                Parameters[0] = false; //in bacground?
                Parameters[0] = Missing.Value; //append
                Parameters[0] = 0; //all document wdPrintAllDocument
                Parameters[0] = Missing.Value; //Output file name
                Parameters[0] = Missing.Value; //From
                Parameters[0] = Missing.Value; //To page
                Parameters[0] = Missing.Value; //Item?
                Parameters[0] = 1; //Copies
                Parameters[0] = Missing.Value; //Pages
                Parameters[0] = Missing.Value; //Page type?
                Parameters[0] = false; //print to file
                Parameters[0] = false; //collate
                Parameters[0] = Missing.Value; //only for MAC
                Parameters[0] = Missing.Value; //Manual duplex
                Parameters[0] = Missing.Value; //collate
                objCurDoc.GetType().InvokeMember("PrintOut",
                    BindingFlags.InvokeMethod, null, objCurDoc, null);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

Предлагаю ознакомиться с аналогичными статьями: