我目前正在創建一個MailMerge文件並且想要顯示一個字符串列表。在過去,我已經使用對象(例如Customer
)的列表,並能夠在文字,文檔是這樣的:MailMerge #foreach使用Aspose.Words的字符串列表
{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}
但是現在,我有strings
而不是對象名單,我只是想向他們展示:
{{ #foreach List }}
{{???}}
{{ /foreach List }}
因此,應該在???
處發生什麼。或者我應該將#foreach List
更改爲.NET C#中的foreach之類的東西,例如{{ #foreach value in List }}
或類似的東西?
我一直沒能找到很多關於MailMerge的內容,一般說來,老實說,在MS Word文檔中沒有關於foreach的內容。
如果這是不可能的我想我必須把字符串放在一個容器類?像:
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));
}
}
我從來沒有見過這種語法。這是內置功能還是附加功能? –
@lc。它是轉換數據的'Aspose.Words'庫的'MailMerge'功能。我編輯了我的問題,以顯示word-doc如何與我們的數據一起轉換的示例。 –