Cet article explique comment effectuer un publipostage dans MS Word avec C#. Il détaille la configuration de l’IDE, les étapes à suivre et un exemple de code complet démontrant comment faire un publipostage dans Word avec C#. Tous les fichiers nécessaires sont générés dans ce code, il n’est donc pas nécessaire d’avoir un fichier d’entrée ou des données pour l’exécuter.
Étapes pour créer un publipostage dans Word avec C#
- Configurer l’IDE pour utiliser Aspose.Words pour .NET afin d’effectuer un publipostage
- Créer un fichier modèle de publipostage avec la classe DocumentBuilder
- Créer ou charger un fichier XML contenant les données d’entrée pour le modèle de publipostage
- Créer un DataSet à partir du fichier XML chargé
- Appeler la méthode MailMerge.Execute() sur le document en utilisant la table de données
- Enregistrer le fichier Word de sortie avec une page distincte pour chaque entrée du tableau
Ces étapes expliquent le processus de publipostage dans MS Word avec C#. Tout d’abord, créez un modèle de rapport d’étudiant, générez un fichier XML contenant les données du rapport de l’étudiant et créez un tableau de données à partir de ce fichier XML. Ensuite, appelez la méthode MailMerge.Execute()
en fournissant le nom du tableau cible dans le DataSet et enregistrez le fichier Word de sortie sur le disque.
Code pour créer un publipostage dans MS Word avec C#
using System.Data; | |
using Aspose.Words; | |
class Program | |
{ | |
static void Main() | |
{ | |
// Apply license | |
License license = new License(); | |
license.SetLicense("license.lic"); | |
// Create a student report template | |
Document document = CreateStudentReportTemplate(); | |
document.Save("ReportTemplate.docx"); | |
Console.WriteLine("Report Template generated successfully."); | |
// Generate an XML file with sample student data | |
string XmlFileName = GenerateSampleStudentData(); | |
Console.WriteLine($"Sample XML file '{XmlFileName}' has been created."); | |
// Read the XML data into a DataSet | |
DataSet studentDataset = new DataSet(); | |
studentDataset.ReadXml(XmlFileName); | |
// Perform mail merge using the dataset | |
Document doc = new Document("ReportTemplate.docx"); | |
doc.MailMerge.Execute(studentDataset.Tables["Student"]); | |
// Save the final report | |
doc.Save("FinalReports.docx"); | |
Console.WriteLine("Mail merge completed. Output saved as 'FinalReports.docx'."); | |
} | |
static Document CreateStudentReportTemplate() | |
{ | |
// Create a new document using DocumentBuilder | |
DocumentBuilder builder = new DocumentBuilder(); | |
// Insert student name fields | |
builder.InsertField("MERGEFIELD StudentFirstName \\* MERGEFORMAT"); | |
builder.InsertField("MERGEFIELD StudentLastName \\* MERGEFORMAT"); | |
builder.InsertParagraph(); | |
// Insert academic details | |
builder.InsertField("MERGEFIELD Subject \\* MERGEFORMAT"); | |
builder.InsertBreak(BreakType.LineBreak); | |
builder.InsertField("MERGEFIELD MarksObtained \\* MERGEFORMAT"); | |
builder.InsertBreak(BreakType.LineBreak); | |
builder.InsertField("MERGEFIELD TotalMarks \\* MERGEFORMAT"); | |
builder.InsertBreak(BreakType.LineBreak); | |
builder.InsertField("MERGEFIELD Grade \\* MERGEFORMAT"); | |
builder.InsertParagraph(); | |
// Insert teacher comments | |
builder.InsertField("MERGEFIELD TeacherComments \\* MERGEFORMAT"); | |
builder.InsertBreak(BreakType.LineBreak); | |
// Insert principal's name | |
builder.InsertField("MERGEFIELD PrincipalName \\* MERGEFORMAT"); | |
builder.InsertParagraph(); | |
return builder.Document; | |
} | |
static string GenerateSampleStudentData() | |
{ | |
string fileName = "StudentData.xml"; | |
File.WriteAllText(fileName, $@" | |
<Students> | |
<Student> | |
<StudentFirstName>Emily</StudentFirstName> | |
<StudentLastName>Johnson</StudentLastName> | |
<Subject>Mathematics</Subject> | |
<MarksObtained>85</MarksObtained> | |
<TotalMarks>100</TotalMarks> | |
<Grade>A</Grade> | |
<TeacherComments>Excellent performance!</TeacherComments> | |
<PrincipalName>Dr. William Carter</PrincipalName> | |
</Student> | |
<Student> | |
<StudentFirstName>Liam</StudentFirstName> | |
<StudentLastName>Smith</StudentLastName> | |
<Subject>Science</Subject> | |
<MarksObtained>78</MarksObtained> | |
<TotalMarks>100</TotalMarks> | |
<Grade>B</Grade> | |
<TeacherComments>Good effort, keep improving.</TeacherComments> | |
<PrincipalName>Dr. William Carter</PrincipalName> | |
</Student> | |
</Students>"); | |
return fileName; | |
} | |
} |
Ce code démontre le processus de publipostage dans MS Word étape par étape avec C#. Nous avons utilisé la méthode DocumentBuilder.InsertField()
avec la balise MERGEFIELD
pour générer le modèle souhaité. Vous pouvez appliquer tous les styles et mises en page souhaités selon vos besoins.
Cet article nous a appris à implémenter un publipostage dans MS Word étape par étape avec C#. Pour définir un style et concevoir des tableaux personnalisés, consultez l’article sur la conception de tableaux dans Word avec C#.