diff --git a/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices.sln b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices.sln new file mode 100644 index 000000000..642b7dec8 --- /dev/null +++ b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35527.113 d17.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Generate-color-coded-invoices", "Generate-color-coded-invoices\Generate-color-coded-invoices.csproj", "{5B0540C8-1A4D-4BB4-A0B9-10028D140E00}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5B0540C8-1A4D-4BB4-A0B9-10028D140E00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B0540C8-1A4D-4BB4-A0B9-10028D140E00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B0540C8-1A4D-4BB4-A0B9-10028D140E00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B0540C8-1A4D-4BB4-A0B9-10028D140E00}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Data/Template.docx b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Data/Template.docx new file mode 100644 index 000000000..b694bb729 Binary files /dev/null and b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Data/Template.docx differ diff --git a/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Generate-color-coded-invoices.csproj b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Generate-color-coded-invoices.csproj new file mode 100644 index 000000000..a79a6c2a7 --- /dev/null +++ b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Generate-color-coded-invoices.csproj @@ -0,0 +1,24 @@ + + + + Exe + net8.0 + Generate_color_coded_invoices + enable + enable + + + + + + + + + Always + + + Always + + + + diff --git a/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Output/.gitkeep b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Output/.gitkeep new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Output/.gitkeep @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Program.cs b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Program.cs new file mode 100644 index 000000000..9f1d7386d --- /dev/null +++ b/Mail-Merge/Generate-color-coded-invoices/.NET/Generate-color-coded-invoices/Program.cs @@ -0,0 +1,61 @@ +using Syncfusion.DocIO; +using Syncfusion.DocIO.DLS; +using System.Data; +using Syncfusion.Drawing; + + +// Holds row index to color mapping +Dictionary TextColors = new Dictionary(); +// Load the Word document +using (WordDocument document = new WordDocument(Path.GetFullPath(@"Data/Template.docx"))) +{ + + // Get invoice data + DataTable invoiceTable = GetInvoiceData(); + + // Store color info by row index + for (int i = 0; i < invoiceTable.Rows.Count; i++) + TextColors.Add(i, invoiceTable.Rows[i]["FontColor"]); + + // Hook merge event to apply font color + document.MailMerge.MergeField += ApplyColorToFields; + + // Enable separate page for each invoice + document.MailMerge.StartAtNewPage = true; + + // Perform mail merge + document.MailMerge.ExecuteGroup(invoiceTable); + + // Save the modified document + document.Save(Path.GetFullPath(@"Output/Result.docx"), FormatType.Docx); +} + +// Event handler to apply text color based on row +void ApplyColorToFields(object sender, MergeFieldEventArgs args) +{ + if (TextColors.TryGetValue(args.RowIndex, out object color)) + args.TextRange.CharacterFormat.TextColor = (Color)color; +} + +// Generates sample invoice data +DataTable GetInvoiceData() +{ + DataTable table = new DataTable("Invoice"); + + table.Columns.Add("InvoiceNumber"); + table.Columns.Add("InvoiceDate"); + table.Columns.Add("CustomerName"); + table.Columns.Add("ItemDescription"); + table.Columns.Add("Amount"); + table.Columns.Add("FontColor", typeof(Color)); + + // First Invoice + table.Rows.Add("INV001", "2024-05-01", "Andy Bernard", "Consulting Services", "$3000.00", Color.Teal); + // Second Invoice + table.Rows.Add("INV002", "2024-05-05", "Stanley Hudson", "Software Development", "$4500.00", Color.DarkOrange); + // Third Invoice + table.Rows.Add("INV003", "2024-05-10", "Margaret Peacock", "UI Design Services", "$2000.00", Color.Indigo); + + return table; +} +