From d53e2507769ad9f3cdc54f7b6fd07c10fe0248a9 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Wed, 10 Dec 2025 13:49:08 +0530 Subject: [PATCH 1/2] Added Sample --- .../.NET/Generate-invoices-from-xml-data.sln | 25 ++++++ .../Data/InvoiceDetails.xml | 58 +++++++++++++ .../Data/Template.docx | Bin 0 -> 34125 bytes .../Generate-invoices-from-xml-data.csproj | 28 +++++++ .../Output/.gitkeep | 1 + .../Program.cs | 77 ++++++++++++++++++ 6 files changed, 189 insertions(+) create mode 100644 Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data.sln create mode 100644 Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml create mode 100644 Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/Template.docx create mode 100644 Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Generate-invoices-from-xml-data.csproj create mode 100644 Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Output/.gitkeep create mode 100644 Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Program.cs diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data.sln b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data.sln new file mode 100644 index 000000000..d7892c4aa --- /dev/null +++ b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36518.9 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Generate-invoices-from-xml-data", "Generate-invoices-from-xml-data\Generate-invoices-from-xml-data.csproj", "{DE5C1DFA-6686-4D2C-878A-B0BC60558FF8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DE5C1DFA-6686-4D2C-878A-B0BC60558FF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE5C1DFA-6686-4D2C-878A-B0BC60558FF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE5C1DFA-6686-4D2C-878A-B0BC60558FF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE5C1DFA-6686-4D2C-878A-B0BC60558FF8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {74001C0A-D635-46A4-AF4A-401D245EF6AA} + EndGlobalSection +EndGlobal diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml new file mode 100644 index 000000000..7a1406efd --- /dev/null +++ b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml @@ -0,0 +1,58 @@ + + + + 12345 + 2025-04-28 + John Doe + + + + + 1 + SKU123 + Product A + 100.00 + + + 2 + SKU124 + Product B + 200.00 + + + 3 + SKU125 + Product C + 200.00 + + 500.00 + + + 10295 + 2025-04-20 + Paul Henriot + + + + + 1 + SKU123 + Product D + 150.00 + + + 2 + SKU124 + Product E + 200.00 + + + 3 + SKU125 + Product F + 220.00 + + 570.00 + + + diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/Template.docx b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/Template.docx new file mode 100644 index 0000000000000000000000000000000000000000..65f2e7d90970935937eae0440aa1f81b45f9ac1d GIT binary patch literal 34125 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 CtF62M literal 0 HcmV?d00001 diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Generate-invoices-from-xml-data.csproj b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Generate-invoices-from-xml-data.csproj new file mode 100644 index 000000000..21b2f38aa --- /dev/null +++ b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Generate-invoices-from-xml-data.csproj @@ -0,0 +1,28 @@ + + + + Exe + net8.0 + Generate_invoices_from_xml_data + enable + enable + + + + + + + + + + Always + + + Always + + + Always + + + + diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Output/.gitkeep b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Output/.gitkeep new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Output/.gitkeep @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Program.cs b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Program.cs new file mode 100644 index 000000000..15c7b0ef2 --- /dev/null +++ b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Program.cs @@ -0,0 +1,77 @@ +using Syncfusion.DocIO.DLS; +using System.Dynamic; +using System.Xml; + +namespace Generate_invoices_from_xml_data +{ + class Program + { + public static void Main(string[] args) + { + // Load the template Word document + WordDocument document = new WordDocument(Path.GetFullPath(@"Data/Template.docx")); + // To start each record at new page, so enable this property + document.MailMerge.StartAtNewPage = true; + // Perform the mail merge for the group + document.MailMerge.ExecuteNestedGroup(GetRelationalData()); + // Save the result Word document. + document.Save(Path.GetFullPath("../../../Output/Output.docx")); + // Close the Word document + document.Close(); + } + #region Helper Method + static MailMergeDataTable GetRelationalData() + { + //Gets data from XML + Stream xmlStream = File.OpenRead(Path.GetFullPath(@"Data/InvoiceDetails.xml")); + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(xmlStream); + xmlStream.Dispose(); + + ExpandoObject customerDetails = new ExpandoObject(); + GetDataAsExpandoObject((xmlDocument as XmlNode).LastChild, ref customerDetails); + // Treat customerDetails as a dictionary + IDictionary customerDict = customerDetails as IDictionary; + // Get the "Invoices" list + List invoicesList = customerDict["Invoices"] as List; + // Take the first item in that list + IDictionary firstInvoiceGroup = invoicesList[0] as IDictionary; + // Get the "Invoice" list from that group + List invoices = firstInvoiceGroup["Invoice"] as List; + //Creates an instance of "MailMergeDataTable" by specifying mail merge group name and "IEnumerable" collection + MailMergeDataTable dataTable = new MailMergeDataTable("Invoices", invoices); + return dataTable; + } + /// + /// Gets the data as ExpandoObject. + /// + /// The reader. + /// + /// reader + /// Unexpected xml tag + reader.LocalName + private static void GetDataAsExpandoObject(XmlNode node, ref ExpandoObject dynamicObject) + { + if (node.InnerText == node.InnerXml) + dynamicObject.TryAdd(node.LocalName, node.InnerText); + else + { + List childObjects; + if ((dynamicObject as IDictionary).ContainsKey(node.LocalName)) + childObjects = (dynamicObject as IDictionary)[node.LocalName] as List; + else + { + childObjects = new List(); + dynamicObject.TryAdd(node.LocalName, childObjects); + } + ExpandoObject childObject = new ExpandoObject(); + foreach (XmlNode childNode in (node as XmlNode).ChildNodes) + { + GetDataAsExpandoObject(childNode, ref childObject); + } + childObjects.Add(childObject); + } + } + #endregion + } +} + From b2cc5ec9e6dc1d89961e31b3b0389badd0085654 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 12 Dec 2025 14:46:06 +0530 Subject: [PATCH 2/2] Modified input document --- .../Generate-invoices-from-xml-data/Data/InvoiceDetails.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml index 7a1406efd..9b73963a5 100644 --- a/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml +++ b/Mail-Merge/Generate-invoices-from-xml-data/.NET/Generate-invoices-from-xml-data/Data/InvoiceDetails.xml @@ -4,9 +4,6 @@ 12345 2025-04-28 John Doe - - - 1 SKU123 @@ -31,9 +28,6 @@ 10295 2025-04-20 Paul Henriot - - - 1 SKU123