Слияние почты с использованием шаблона в C# и MVC
Я работаю на платформе .net MVC. Я создал шаблон word (. dotx) и добавил в него поля слияния. Я заменяю поле слияния из значений столбцов базы данных. Теперь я хочу сделать цикл на поле слияния. например: - у меня есть поля слияния с именами < DepartmentID > и < DepartmentName & gt; . И я получаю данные из таблицы базы данных с именем "tblDepartment", которая имеет два столбца" DepID "и"DepName". эта таблица имеет 5 строк. я хочу зациклиться на этих слияниях.
я хочу показать такой файл. прежде чем выполнить docx это :- &ЛТ; столбец DepartmentID &ГТ; &ЛТ; Кафедраимя &ГТ;
после выполнения кода:-
DepID DepName 1 DotNet 2 Java 3 PHP
Что я уже пробовал:
вот ИД мой код:
public void Mail_Merge() { try { Application wordApp = new Application(); Document doc = new Document(); Object oMissing = System.Reflection.Missing.Value; Object oTemplatePath = "D:\\Letter_Template.dotx"; for (int i = 0; i < 3; i++) { Document wordDoc = new Document(); wordDoc = wordApp.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing); foreach (Field myMergeField in wordDoc.Fields) { Range rngFieldCode = myMergeField.Code; String fieldText = rngFieldCode.Text; // ONLY GETTING THE MAILMERGE FIELDS if (fieldText.StartsWith(" MERGEFIELD")) { // THE TEXT COMES IN THE FORMAT OF // MERGEFIELD MyFieldName \\* MERGEFORMAT // THIS HAS TO BE EDITED TO GET ONLY THE FIELDNAME "MyFieldName" Int32 endMerge = fieldText.IndexOf("\\"); Int32 fieldNameLength = fieldText.Length - endMerge; String fieldName = fieldText.Substring(11, endMerge - 11); // GIVES THE FIELDNAMES AS THE USER HAD ENTERED IN .dot FILE fieldName = fieldName.Trim(); // **** FIELD REPLACEMENT IMPLEMENTATION GOES HERE ****// // THE PROGRAMMER CAN HAVE HIS OWN IMPLEMENTATIONS HERE if (fieldName == "Address") { if (i == 0) { myMergeField.Select(); wordApp.Selection.TypeText("Ram Debey"); } else if (i == 1) { myMergeField.Select(); wordApp.Selection.TypeText("Mukesh Mahapatra"); } else { myMergeField.Select(); wordApp.Selection.TypeText("Inamul Afridi"); } } } } } wordApp.ActiveDocument.SaveAs("D:\\MergeLetter.doc", ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); wordApp.ActiveDocument.Close(ref oMissing, ref oMissing, ref oMissing); // wordApp.Documents.Open("myFile.doc"); wordApp.Application.Quit(); } catch(Exception ex) { } }
Richard Deeming
Вы должны прочитать следующую статью базы знаний Microsoft:
Соображения по автоматизации работы офиса на стороне сервера[^]
В настоящее время корпорация Майкрософт не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого автоматического, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или взаимоблокировку при запуске Office в этой среде.
Jewel-Davis
Я бы рекомендовал вам проверить это эти примеры слияния почты сделаны в .NET. В примерах используется Библиотека .NET для документов Word это безопасно использовать и на стороне сервера.