В настоящее время я создаю файл MailMerge и хочу показать список строк. В прошлом я использовал список объектов (например, Customer
) и мог иметь что-то вроде этого в документе Word:
{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}
Однако теперь у меня есть список strings
вместо объектов, и я просто хочу их показать:
{{ #foreach List }}
{{???}}
{{ /foreach List }}
Итак, что должно идти на ???
. Или мне следует изменить #foreach List
на что-то вроде foreach в .NET C#, то есть {{ #foreach value in List }}
или что-то подобное?
Честно говоря, мне не удалось найти много о MailMerge в целом, и ничего о foreach в документе MS Word.
Если это невозможно, я думаю, мне придется поместить строку в контейнерный класс? Нравиться:
public class StringContainer
{
public string String { get; set; }
}
и
{{ #foreach List }}
{{String}}
{{ /foreach List}}
РЕДАКТИРОВАТЬ:
Мы используем Aspose.Words
(.MailMerge
и .MailMerging
) для этого преобразования из нашего объекта данных в данные в документе MS Word. Вот код для конвертации:
private static byte[] GenerateDocument(Stream template, DocumentDataSource dataSource, SaveOptions saveOptions, IFieldMergingCallback fieldMergingCallback = null)
{
var doc = new Document(template);
doc.MailMerge.FieldMergingCallback = fieldMergingCallback;
doc.MailMerge.UseNonMergeFields = true;
doc.MailMerge.CleanupOptions = MailMergeCleanupOptions.RemoveContainingFields |
MailMergeCleanupOptions.RemoveUnusedFields |
MailMergeCleanupOptions.RemoveUnusedRegions |
MailMergeCleanupOptions.RemoveEmptyParagraphs;
doc.MailMerge.Execute(dataSource);
doc.MailMerge.ExecuteWithRegions((IMailMergeDataSourceRoot)dataSource);
doc.UpdateFields();
using (var ms = new MemoryStream())
{
doc.Save(ms, saveOptions);
return ms.ToArray();
}
}
А вот пример того, как мы его используем:
public byte[] CreateLetter(string filePath, string fileName, OurDataObject data)
{
var path = Path.Combine(filePath, fileName);
using (var fs = File.OpenRead(path))
{
var dataSource = new DocumentDataSource(data);
return GenerateDocument(fs, dataSource, new OoxmlSaveOptions(SaveFormat.Docx));
}
}
MailMerge
библиотекиAspose.Words
, которая преобразует данные. Я отредактировал свой вопрос, чтобы показать пример того, как word-doc преобразуется с нашими данными. - person Kevin Cruijssen   schedule 30.10.2015