Edit Microsoft Word Document From Your Application






4.24/5 (14 votes)
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:
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:
Now design your form in VS IDE. I did it like this:
Using the Code
- 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
- 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); } }
- 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