Click here to Skip to main content
15,891,745 members
Articles / Productivity Apps and Services / Microsoft Office

Edit Microsoft Word Document From Your Application

Rate me:
Please Sign up or sign in to vote.
4.24/5 (16 votes)
14 May 2009CPOL1 min read 154.2K   40   27
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.
    C#
    using Word = Microsoft.Office.Interop.Word;//<- this is what I am talking about
  2. Code behind the button:
    C#
    //	
    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():
    C#
    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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
India India
I love coding.... yes.... I do....!

Comments and Discussions

 
Questionmissing download link Pin
developerc sapphire5-Jan-18 20:19
developerc sapphire5-Jan-18 20:19 
QuestionClearFormatting(), Marshal.ReleaseComObject(object) left out! Pin
kp4231-Aug-16 9:27
kp4231-Aug-16 9:27 
QuestionHow to handle check box and radio button in same example? Pin
shiva22393-Apr-15 0:47
shiva22393-Apr-15 0:47 
QuestionHow do I replace the text which is in some font in Word Document? Pin
Nirajan Pant29-Dec-14 15:21
Nirajan Pant29-Dec-14 15:21 
GeneralMy vote of 1 Pin
Tony496613-Oct-14 2:25
Tony496613-Oct-14 2:25 
Questionmissing Pin
aalhanane18-Dec-13 12:32
aalhanane18-Dec-13 12:32 
SuggestionCode doesn't work as expected Pin
Pavan Gayakwad20-Mar-13 0:36
Pavan Gayakwad20-Mar-13 0:36 
SuggestionFor those experiencing issues... Pin
Alejandro Miralles23-Nov-12 5:43
Alejandro Miralles23-Nov-12 5:43 
QuestionRecive Error Pin
mymina10-Aug-12 17:18
mymina10-Aug-12 17:18 
GeneralMy vote of 5 Pin
Madhusudhan14323-Jun-12 1:15
Madhusudhan14323-Jun-12 1:15 
Generaltank you Pin
morteza fakoor22-May-12 23:51
morteza fakoor22-May-12 23:51 
QuestionError on execution Pin
Moneer Tarabishi4-Mar-12 1:31
Moneer Tarabishi4-Mar-12 1:31 
QuestionHow about using mail merge? Pin
Robert Hutch1-Mar-12 0:02
Robert Hutch1-Mar-12 0:02 
GeneralMy vote of 5 Pin
poornesh sharma28-Feb-12 1:10
professionalpoornesh sharma28-Feb-12 1:10 
BugError in process Pin
Sarvesh Kumar Gupta18-Nov-11 23:47
Sarvesh Kumar Gupta18-Nov-11 23:47 
QuestionThank you! Pin
c4mel0t13-Jul-11 23:06
c4mel0t13-Jul-11 23:06 
GeneralEdit Microsoft Word Document From Your Application Pin
amitrajahuja23-Nov-10 3:36
amitrajahuja23-Nov-10 3:36 
Generalquestion Pin
waelstaitieh5-Mar-10 22:57
waelstaitieh5-Mar-10 22:57 
GeneralOffice Versions Pin
maspr20-May-09 3:13
maspr20-May-09 3:13 
GeneralRe: Office Versions Pin
Jacques Bourgeois20-May-09 13:52
Jacques Bourgeois20-May-09 13:52 
GeneralRe: Office Versions Pin
Bhuvnesh Pandey14-May-13 19:53
Bhuvnesh Pandey14-May-13 19:53 
GeneralImages Pin
stevennuon19-May-09 22:24
stevennuon19-May-09 22:24 
GeneralOuch! PinPopular
Jacques Bourgeois19-May-09 13:44
Jacques Bourgeois19-May-09 13:44 
GeneralRe: Ouch! Pin
morajo19-May-09 20:03
morajo19-May-09 20:03 
GeneralRe: Ouch! Pin
Jacques Bourgeois20-May-09 13:39
Jacques Bourgeois20-May-09 13:39 
In order to properly code against Word (or any software that uses VBA as its macro language), you need to know how to use the software first. Otherwise you end up working in a bad way and/or writing 200 lines of codes where 1 is enough. Unfortunately, most programmers that try to program Word documents ends up with crap because they do not know how to use Word. They treat a Word document as if it was an ASCII text file, and I think you will thinks as I do : a .doc file has nothing to compare it to a .txt file.

Bookmarks can be referenced through special fields in a Word Document.

When creating the template, you create one Bookmark of a given name, and if you want to reuse the content of the bookmark in other places in the document, you set the cursor to that place and you do the following:

Insert... Cross-reference.
In the Reference type you select Bookmark.
In the Insert reference to you then select Bookmark text.
You select your bookmark from the list at the bottom of the screen.
OK.

A field referencing the content of the bookmark will be created at the cursor. If you change the content of the bookmark, the field will be updated with the new content.

Note that using that technique, selecting the bookmark page instead of the bookmark text, you could create something such as "As we have seen on page <reference to="" the="" bookmark="">". The field is then updated to the page where the bookmark resides instead of its content.

That is one of the reasons why working with bookmarks in a document is a lot more interesting than working with tags.

I have been working and giving training in VBA for Office for many years. The problem I see everywhere is that, as I have stated before, programmers are trying to code on a piece of software that they do not know. Even if you connect to Office through .NET, you are actually calling objects that were designed for VBA, not for .NET. And VBA for Office was firstly designed as a macro language for the different applications. You need to know how to use the software to code properly against it.

Most programmers know Excel quite well, so they write code that is not so bad against Excel.

But most programmers do not know Word, so the code they write is not efficient. How many programmer out there know about Bookmarks, Fields and Sections in Word? Those are the things a secretary use, VBA for Word has been created for her, so those are also the things a programmer should use.

I often told to my students: if you do not know how to do something manually in an Office document, don't try to code right away. Go and see someone who is as good a user of the software as you can find (usually a secretary for Word; not one that creates simple letters, but the one that create the 200-300 pages documents in the company). Start the macro recorder in the software and ask her/him to perform manually what you want to do with your code. Stop the macro recorder, and go look at the code that was generated. This is usually not efficient code, but this is where you will find about all those things such as Bookmarks and Fields objects that are the best ones to use in the code.

Jacques Bourgeois

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.