Una delle funzioni più comode per la produzione di reportistica da C# è l’utilizzo del package “Syncfusion”, per la manipolazione di file word.
Nella maggior parte dei casi i campi del documento sono pochi e statici, ma qualora dovessero essere tanti e non si voglia creare un oggetto di business con tutte quelle proprietà, è possibile generare e fare merge dei field dinamici su documento Word utilizzando C# e Syncfusion.
Dato un template Word con una griglia tipo questa (qui non si scappa… si deve fare a mano!)

una scelta è creare un oggetto di business (un Model C#) con tutte le proprietà. Ma il caso esposto in questo articolo riguarda la creazione di un oggetto dinamico a cui queste proprietà vengano aggiunte a partire da una Hashtable, popolata all’interno di vari cicli foreach.
Intanto è necessario aggiungere al progetto una Reference a
Assemblies > Framework > Microsoft.CSharp
Qui di seguito il codice necessario per generare dinamicamente le proprietà dell’oggetto che andremo ad agganciare alla tabella Word
dynamic riskTable = new ExpandoObject();
var dictionary = (IDictionary)riskTable;
foreach (DictionaryEntry de in (Hashtable)lstRischi)
{
dictionary.Add(de.Key.ToString(), de.Value);
}
A questo punto, per completare il merge, ecco il codice completo per l’uso di Syncfusion in C# per la creazione di un file word
List listaReport = new List();
listaReport.Add(riskTable); //Notare che va usato, rispetto al codice precedente, l’oggetto originale
WordDocument document = new WordDocument(“nomefile.docx”);
MailMergeDataTable dataTable = new MailMergeDataTable(“DatiTable”, listaReport);
document.MailMerge.ExecuteGroup(dataTable);
document.Save(nomeFileOutput, FormatType.Docx);
document.Close();
All’interno del file Word nel quale si voglio agganciare i fields, i campi, è necessario inserire un inizio ed un fine blocco, come da immagine seguente


Qui il link alla documentazione ufficiale Syncfusion, relativa all’uso del mailmerge
https://help.syncfusion.com/file-formats/docio/mail-merge/mail-merge-for-group