diff --git a/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values.sln b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values.sln new file mode 100644 index 000000000..ad34e0c0a --- /dev/null +++ b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31911.196 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sum-mergefield-values", "Sum-mergefield-values\Sum-mergefield-values.csproj", "{D3AF529E-DB54-4294-A876-DD42E1E472D0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D3AF529E-DB54-4294-A876-DD42E1E472D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3AF529E-DB54-4294-A876-DD42E1E472D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3AF529E-DB54-4294-A876-DD42E1E472D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3AF529E-DB54-4294-A876-DD42E1E472D0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {58137FF9-5AE1-4514-9929-3A8A7DA1DFEB} + EndGlobalSection +EndGlobal diff --git a/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Data/ReportData.json b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Data/ReportData.json new file mode 100644 index 000000000..6d8b62272 --- /dev/null +++ b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Data/ReportData.json @@ -0,0 +1,18 @@ +{ + "Toplevel1":"1", + "Reports": + [ + { + "Subject": "Maths", + "Marks": "80" + }, + { + "Subject":"English", + "Marks":"70" + }, + { + "Subject":"Science", + "Marks":"82" + } + ] +} \ No newline at end of file diff --git a/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Data/Template.docx b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Data/Template.docx new file mode 100644 index 000000000..8b395a468 Binary files /dev/null and b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Data/Template.docx differ diff --git a/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Output/.gitkeep b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Output/.gitkeep new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Output/.gitkeep @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Program.cs b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Program.cs new file mode 100644 index 000000000..8fbb34b52 --- /dev/null +++ b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Program.cs @@ -0,0 +1,103 @@ +using Newtonsoft.Json.Linq; +using Syncfusion.DocIO; +using Syncfusion.DocIO.DLS; +using System; +using System.Collections.Generic; +using System.IO; + +namespace Sum_mergefield_values +{ + class Program + { + static int totalMarks = 0; + static void Main(string[] args) + { + using (FileStream fileStream = new FileStream(Path.GetFullPath(@"Data/Template.docx"), FileMode.Open)) + { + //Loads an existing Word document. + using (WordDocument wordDocument = new WordDocument(fileStream, FormatType.Automatic)) + { + // Gets JSON object from JSON string. + JObject jsonObject = JObject.Parse(File.ReadAllText(Path.GetFullPath(@"Data/ReportData.json"))); + // Converts to IDictionary data from JSON object. + IDictionary data = GetData(jsonObject); + + //Creates the mail merge data table in order to perform mail merge + MailMergeDataTable dataTable = new MailMergeDataTable("Reports", (List)data["Reports"]); + + //Uses the mail merge event handler to sum the field's values and set that value to the TotalMarks field during mail merge. + wordDocument.MailMerge.MergeField += new MergeFieldEventHandler(MergeField_Event); + + //Performs the mail merge operation with the dynamic collection + wordDocument.MailMerge.ExecuteGroup(dataTable); + + string[] fieldNames = new string[] { "TotalMarks" }; + string[] fieldValues = new string[] { "" }; + + //Performs the mail merge + wordDocument.MailMerge.Execute(fieldNames, fieldValues); + + //Saves the WOrd document file to file system. + using (FileStream outputStream = new FileStream(Path.GetFullPath(@"Output/Result.docx"), FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) + { + wordDocument.Save(outputStream, FormatType.Docx); + } + } + } + } + /// + /// Event to sum the field's values and set that value to the TotalMarks field during mail merge. + /// + private static void MergeField_Event(object sender, MergeFieldEventArgs args) + { + + if (args.FieldName == "Marks") + { + //sum the Marks field values. + totalMarks += Convert.ToInt32(args.FieldValue); + } + if (args.FieldName == "TotalMarks") + { + //Set sum of the Marks field values to the TotalMarks field; + args.Text = totalMarks.ToString(); + } + } + + /// + /// Gets array of items from JSON array. + /// + /// JSON array. + /// List of objects. + private static List GetData(JArray jArray) + { + List jArrayItems = new List(); + foreach (var item in jArray) + { + object keyValue = null; + if (item is JObject) + keyValue = GetData((JObject)item); + jArrayItems.Add(keyValue); + } + return jArrayItems; + } + /// + /// Gets data from JSON object. + /// + /// JSON object. + /// IDictionary data. + private static IDictionary GetData(JObject jsonObject) + { + Dictionary dictionary = new Dictionary(); + foreach (var item in jsonObject) + { + object keyValue = null; + if (item.Value is JArray) + keyValue = GetData((JArray)item.Value); + else if (item.Value is JToken) + keyValue = ((JToken)item.Value).ToObject(); + dictionary.Add(item.Key, keyValue); + } + return dictionary; + } + } +} diff --git a/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Sum-mergefield-values.csproj b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Sum-mergefield-values.csproj new file mode 100644 index 000000000..f76ffb925 --- /dev/null +++ b/Mail-Merge/Sum-mergefield-values/.NET/Sum-mergefield-values/Sum-mergefield-values.csproj @@ -0,0 +1,26 @@ + + + + Exe + net8.0 + Sum_mergefield_values + + + + + + + + + + Always + + + Always + + + Always + + + +