我目前正在制作一个 MailMerge 文件并希望显示一个字符串列表。在过去,我使用了一个对象列表(例如 Customer
)并且能够在 Word-doc 中包含这样的内容:
{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}
但是现在,我有一个 strings
列表而不是 Objects,我只是想显示它们:
{{ #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));
}
}
最佳答案
我建议你使用Aspose.Words LINQ Reporting Engine达到您的要求。
LINQ 报告引擎的典型模板由通用文档内容和描述模板结构和数据绑定(bind)的标记组成。您可以仅使用可占据多个段落的连续文本来形成这些标签,以更具描述性。
标签体必须满足以下要求:
- 标签体必须由“<<”和“>>”字符序列包围。
- 标签体必须只包含文本节点。
- 标签体不得位于标记文档节点内,例如 StructuredDocumentTag、CustomXmlMarkup 或 SmartTag。
标签体通常由以下元素组成:
- 标签名称
- 用方括号括起来的表达式
- 标签可用的一组开关,每个开关前面都有 “-”字符
<< tag_name [表达式] –switch1 –switch2 ... >>
特定标签可以有额外的元素。一些标签需要关闭对应物。结束标记在其名称之前有一个“/”字符。此标签的名称必须与相应开始标签的名称相匹配。
<>
注意 – 标记主体元素区分大小写。
请阅读this链接并检查以下代码示例。希望这对你有帮助。
DocumentBuilder builder = new DocumentBuilder();
builder.Write("The items are: <<foreach [item in items]>><<[item]>>, <</foreach>>and others.");
Document doc = builder.Document;
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, new string[] { "Item1", "Item2", "Item3" }, "items");
doc.Save(MyDir + "out.docx");
我在 Aspose 工作,担任开发人员布道师。
关于c# - MailMerge #foreach 使用 Aspose.Words 的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33436664/