В настоящее время я создаю файл MailMerge и хочу показать список строк. В прошлом я использовал список объектов (например Customer
) и в состоянии иметь что-то подобное в Word-документ:MailMerge #foreach список строк с использованием Aspose.Words
{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}
Теперь, однако, у меня есть список strings
вместо объектов, и я просто хочу, чтобы показать им:
{{ #foreach List }}
{{???}}
{{ /foreach List }}
Итак, что должен идти в ???
. Или я должен изменить #foreach List
на что-то вроде foreach в .NET C#, т. Е. {{ #foreach value in List }}
или что-то подобное?
Мне не удалось найти много о MailMerge вообще, если честно, и ничего о foreach в MS Word-doc.
Если это невозможно, я думаю, мне придется поместить строку в контейнерный класс? Как:
public class StringContainer
{
public string String { get; set; }
}
и
{{ #foreach List }}
{{String}}
{{ /foreach List}}
EDIT:
Мы используем Aspose.Words
(.MailMerge
& .MailMerging
) для этого преобразования из нашего Data-объекта данных в документ 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));
}
}
Я никогда не видел этот синтаксис раньше. Является ли это встроенной функцией или надстройкой? –
@lc. Это функция «MailMerge» библиотеки 'Aspose.Words', которая преобразует данные. Я редактировал свой вопрос, чтобы показать пример того, как word-doc преобразуется с нашими данными. –