Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Edit Microsoft Word Document From Your Application

0.00/5 (No votes)
14 May 2009 2  
Create & edit Microsoft Word document from Windows application Form by using C#

Introduction

I faced this problem when I was developing a small tool to write official letters. My requirements were, letter template & content can be changed any time and application will help to get only inputs like, sent to name, organization name, date, etc. and after that when user presses finish button, the letter should be ready for print out along with predefined content & inputs. 

Background

To solve this, I used Microsoft VS 2005 with C# 2.0. 

Here are the steps I followed:  

Add Microsoft.Office.Interop.Word reference to the project from COM Component as follows:

addref.GIF

This will automatically add VBIDE, Microsoft.Office.Core along with Microsoft.Office.Interop.Word as references.

Now create a Microsoft Word document with the fields <Name>, <Date>, <Subject> and letter body. Then place all 3 variables (I called these variables because these will be changed automatically based on user input) where they belong. I did the following:

editword.GIF

Now design your form in VS IDE. I did it like this:

formdesign.GIF

Using the Code

  1. Now let's do some coding…..ya….. so here is my sample coding.
    using Word = Microsoft.Office.Interop.Word;//<- this is what I am talking about
  2. Code behind the button:
    //	
    private void btnlettergen_Click(object sender, EventArgs e)
    {
    //  create offer letter
                    try
                    {
    //  Just to kill WINWORD.EXE if it is running
                        killprocess("winword");	
    //  copy letter format to temp.doc
                        File.Copy("C:\\OfferLetter.doc", "c:\\temp.doc", true);   
    //  create missing object
                        object missing = Missing.Value;
    //  create Word application object
                        Word.Application wordApp = new Word.ApplicationClass();
    //  create Word document object
                        Word.Document aDoc = null;
    //  create & define filename object with temp.doc
                        object filename = "c:\\temp.doc";
    //  if temp.doc available
                        if (File.Exists((string)filename))  
                        {
                            object readOnly = false;
                            object isVisible = false;
    //  make visible Word application
                            wordApp.Visible = false;
    //  open Word document named temp.doc
                            aDoc = wordApp.Documents.Open(ref filename, ref missing, 
    			ref readOnly, ref missing,ref missing, ref missing, 
    			ref missing, ref missing, ref missing, ref missing, 
    			ref missing,ref isVisible, ref missing, ref missing, 
    			ref missing, ref missing);
                            aDoc.Activate();
    //  Call FindAndReplace()function for each change
                            this.FindAndReplace(wordApp, "<Date>", dtpDate.Text);
                            this.FindAndReplace(wordApp, "<Name>", txName.Text.Trim());
                            this.FindAndReplace(wordApp, "<Subject>", 
    					txtSubject.Text.Trim());
    //  save temp.doc after modified
                            aDoc.Save();
                        }
                        else
                            MessageBox.Show("File does not exist.", 
    				"No File", MessageBoxButtons.OK, 
    				MessageBoxIcon.Information);
                        killprocess("winword");
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error in process.", "Internal Error", 
    			MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
    }
  3. Create FindAndReplace():
    private void FindAndReplace(Word.Application wordApp, 
    			object findText, object replaceText)
    {   
                object matchCase = true;
                object matchWholeWord = true;
                object matchWildCards = false;
                object matchSoundsLike = false;
                object matchAllWordForms = false;
                object forward = true;
                object format = false;
                object matchKashida = false;
                object matchDiacritics = false;
                object matchAlefHamza = false;
                object matchControl = false;
                object read_only = false;
                object visible = true;
                object replace = 2;
                object wrap = 1;
                wordApp.Selection.Find.Execute(ref findText, ref matchCase,
                    ref matchWholeWord, ref matchWildCards, ref matchSoundsLike,
                    ref matchAllWordForms, ref forward, ref wrap, ref format,
                    ref replaceText, ref replace, ref matchKashida, 
    						ref matchDiacritics,
                    ref matchAlefHamza, ref matchControl);
    }

Now check out your temp.doc file in C:\, all variables defined under ‘<>’ are replaced with the input values. How's that! 

So, enjoy your coding….. happy coding!

History

  • 14th May, 2009: Initial post

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here