From 35863f2b493b3555787e7b46032ef35b42c97494 Mon Sep 17 00:00:00 2001 From: DharanyaSakthivel-SF4210 Date: Tue, 25 Mar 2025 12:47:14 +0530 Subject: [PATCH 1/2] ES-264021-Generate-Documents-for-each-record --- .../Generate-Documents-for-each-record.sln | 25 +++++++ .../Data/Template.docx | Bin 0 -> 12630 bytes .../Generate-Documents-for-each-record.csproj | 22 ++++++ .../Output/.gitkeep | 1 + .../Program.cs | 70 ++++++++++++++++++ 5 files changed, 118 insertions(+) create mode 100644 Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record.sln create mode 100644 Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Data/Template.docx create mode 100644 Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Generate-Documents-for-each-record.csproj create mode 100644 Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Output/.gitkeep create mode 100644 Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs diff --git a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record.sln b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record.sln new file mode 100644 index 000000000..6ee52799b --- /dev/null +++ b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record.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}") = "Generate-Documents-for-each-record", "Generate-Documents-for-each-record\Generate-Documents-for-each-record.csproj", "{C17B90BC-F559-456B-B189-90B53FF6CDD4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C17B90BC-F559-456B-B189-90B53FF6CDD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C17B90BC-F559-456B-B189-90B53FF6CDD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C17B90BC-F559-456B-B189-90B53FF6CDD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C17B90BC-F559-456B-B189-90B53FF6CDD4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EF357FC6-E9E5-4E3C-B932-43F727BE1DE4} + EndGlobalSection +EndGlobal diff --git a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Data/Template.docx b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Data/Template.docx new file mode 100644 index 0000000000000000000000000000000000000000..abff558a2e4882534053f9557b66f18ebb5d5bb3 GIT binary patch literal 12630 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 literal 0 HcmV?d00001 diff --git a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Generate-Documents-for-each-record.csproj b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Generate-Documents-for-each-record.csproj new file mode 100644 index 000000000..12a12b238 --- /dev/null +++ b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Generate-Documents-for-each-record.csproj @@ -0,0 +1,22 @@ + + + + Exe + net8.0 + Generate_Documents_for_each_record + + + + + + + + + Always + + + Always + + + + diff --git a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Output/.gitkeep b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Output/.gitkeep new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Output/.gitkeep @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs new file mode 100644 index 000000000..9fea11c22 --- /dev/null +++ b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs @@ -0,0 +1,70 @@ +using Syncfusion.DocIO; +using Syncfusion.DocIO.DLS; +using System.Data; +using System.IO; + +namespace Generate_Documents_for_each_record +{ + class Program + { + static void Main(string[] args) + { + //Open the file as Stream. + using (FileStream fileStream = new FileStream(Path.GetFullPath(@"Data/Template.docx"), FileMode.Open)) + { + //Load file stream into Word document. + using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) + { + //Get the data for mail merge. + DataTable table = GetDataTable(); + //Iterate to the each row and generate mail merged document for each rows. + for (int i = 0; i < table.Rows.Count; i++) + { + //Executes mail merge using the data row. + document.MailMerge.Execute(table.Rows[i]); + + //Create a file stream. + using (FileStream outputFileStream = new FileStream(Path.GetFullPath(@"Output/" + "Record_" + (i + 1) + ".docx"), FileMode.Create, FileAccess.ReadWrite)) + { + //Save the Word document to the file stream. + document.Save(outputFileStream, FormatType.Docx); + } + } + } + } + } + /// + /// Get the data for mail merge. + /// + /// + static DataTable GetDataTable() + { + DataTable table = new DataTable(); + + //Defining columns + table.Columns.Add("Name"); + table.Columns.Add("Street"); + table.Columns.Add("City"); + table.Columns.Add("ProjectNo"); + + //Set values + DataRow row; + row = table.NewRow(); + row["Name"] = "Andreas Waning"; + row["Street"] = "Middelwegg 2"; + row["City"] = "Vreden"; + row["ProjectNo"] = "4711"; + table.Rows.Add(row); + + row = table.NewRow(); + row["Name"] = "Mike Korf"; + row["Street"] = "teststreet"; + row["City"] = "TestCity"; + row["ProjectNo"] = "4711"; + table.Rows.Add(row); + + return table; + } + } +} + From e4705dca911db041300eeac773456d68aa3f9fa5 Mon Sep 17 00:00:00 2001 From: DharanyaSakthivel-SF4210 <149999916+DharanyaSakthivel-SF4210@users.noreply.github.com> Date: Thu, 27 Mar 2025 10:09:41 +0530 Subject: [PATCH 2/2] Update Program.cs --- .../.NET/Generate-Documents-for-each-record/Program.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs index 9fea11c22..f04070bde 100644 --- a/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs +++ b/Mail-Merge/Generate-Documents-for-each-record/.NET/Generate-Documents-for-each-record/Program.cs @@ -1,4 +1,4 @@ -using Syncfusion.DocIO; +using Syncfusion.DocIO; using Syncfusion.DocIO.DLS; using System.Data; using System.IO; @@ -13,13 +13,15 @@ static void Main(string[] args) using (FileStream fileStream = new FileStream(Path.GetFullPath(@"Data/Template.docx"), FileMode.Open)) { //Load file stream into Word document. - using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) + using (WordDocument template = new WordDocument(fileStream, FormatType.Docx)) { //Get the data for mail merge. DataTable table = GetDataTable(); //Iterate to the each row and generate mail merged document for each rows. for (int i = 0; i < table.Rows.Count; i++) { + //Clones the template document for creating new document for each record in the data source + WordDocument document = template.Clone(); //Executes mail merge using the data row. document.MailMerge.Execute(table.Rows[i]); @@ -29,6 +31,8 @@ static void Main(string[] args) //Save the Word document to the file stream. document.Save(outputFileStream, FormatType.Docx); } + //Releases the resources occupied by WordDocument instance + document.Dispose(); } } } @@ -67,4 +71,3 @@ static DataTable GetDataTable() } } } -