In most of the application office automation is sometime required and to accomplish that most of the time we use to write code using COM (Interop dll) component or using third party API's. But as per application stand point of view it's not advisable to use COM components for office automation as far as the development platform is Dot Net.
So in order to accomplish the same task without using COM (Interop dll) component or third party API's. We need to follow below steps which will do the trick for office automation.
- Create a windows application.
- Add a new class (utility class) to the application (which contains the method for retrieving the file content and creating the document file).
- Create an html template file (which only contains the design and key data fields). Key data field are those fields which starts and ends with ($) sign (example: $NameOfApplicant$). The value for this key data field is replaced from UI (code behind) dynamically (after the file is loaded into memory).
- Add a button to the default form and call the methods provided in the utility class on button click event.
Code snippet of Utility class
public static class Utility
{
/// <summary>
/// Method used to return
the HTML Template String from HTML File ....
/// </summary>
/// <param name="filePath">template file path</param>
/// <returns></returns>
public static string GetTemplateString(string
filePath)
{
string
templateString = string.Empty;
StreamReader re = null;
try
{
if (!string.IsNullOrEmpty(filePath))
{
re = File.OpenText(filePath);
if (re != null)
templateString = re.ReadToEnd();
}
}
catch (Exception
exp)
{
templateString = string.Empty;
}
finally
{
if (re != null) re.Close();
if (re != null) re.Dispose();
}
return templateString;
}
/// <summary>
/// Method used to create
datafile (txt / doc both).
/// </summary>
/// <param name="filecontent">content of file with actual data</param>
/// <param name="filePath">file path with name & extention</param>
/// <returns></returns>
public static bool CreateDataFile(string
filecontent, string filePath)
{
bool
_IsFileCreated = true;
StreamWriter sw = new
StreamWriter(filePath);
try
{
sw.Write(filecontent);
}
catch
{
_IsFileCreated
= false;
}
finally
{
sw.Close();
sw.Dispose();
}
return _IsFileCreated;
}
}
Sample of html Template file
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<table border="0" cellpadding="0"
cellspacing="0"
width="100%">
<tr>
<td style="font-family:
Calibri; font-size: 8pt;">
<table border="0" cellpadding="0"
cellspacing="0"
width="100%">
<tr><td colspan="3">BIRTH
CRTIFICATE</td></tr>
<tr style="height:10px;"><td colspan="3"></td></tr>
<tr>
<td
width="150"
align="left">Name
Of Applicant</td>
<td
width="15"
align="center">:</td>
<td>$NameOfApplicant$</td>
</tr>
<tr>
<td
width="150"
align="left">District</td>
<td
width="15"
align="center">:</td>
<td>$District$</td>
</tr>
<tr>
<td
width="150"
align="left">Date
Of Birth</td>
<td
width="15"
align="center">:</td>
<td>$DateOfBirth$</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
Code snippet of Button Click Event
private void btnCreateDocument_Click(object sender, EventArgs
e)
{
string DirectoryPath =
System.Text.RegularExpressions.Regex.Replace(Environment.CurrentDirectory, @"\\([^\\])+\\([^\\])+(\\)?$", "");
// below is the HTML Template File Path.
string DocumentTemplate = Utility.GetTemplateString(DirectoryPath
+ "\\CreateDocTemplate.htm");
if (!string.IsNullOrEmpty(DocumentTemplate))
{
//if Template
have Content than it replace the below text content with actual values.
DocumentTemplate
= DocumentTemplate.Replace("$NameOfApplicant$",
"A.V.Mahesh Nair");
DocumentTemplate
= DocumentTemplate.Replace("$District$",
"Malappuram");
DocumentTemplate
= DocumentTemplate.Replace("$DateOfBirth$",
"7th Dec. 1980");
// from here you can create any two type of file (doc /
html).
// first parameter is the Actual HTML Content with data and
second parameter is the documnet file path.
// This method
automatically creats the doc file at the given location.
string strTicks = DateTime.Now.Ticks.ToString();
docFileNameWithPath
= DirectoryPath + "\\" + strTicks
+ "CreateDoc.doc";
Utility.CreateDataFile(DocumentTemplate,
docFileNameWithPath);
if (File.Exists(docFileNameWithPath))
Process.Start(docFileNameWithPath);
}
}