[英]MailMerge #foreach list of strings using Aspose.Words
我目前正在制作一个MailMerge文件,并想显示一个字符串列表。 过去,我使用了对象列表(例如Customer
),并且能够在Word文档中使用类似的内容:
{{ #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));
}
}
我建议您使用Aspose.Words LINQ报告引擎来满足您的要求。
LINQ Reporting Engine的典型模板由通用文档内容和描述模板结构和数据绑定的标签组成。 您可以仅使用运行文本来形成这些标签,这些文本可以占据多个段落以提高描述性。
标签主体必须满足以下要求:
标签主体通常包含以下元素:
<< tag_name [表达式] –switch1 –switch2 ... >>
特殊标签可以包含其他元素。 一些标签需要封闭的对应标签。 结束标记的名称之前带有“ /”字符。 该标签的名称必须与相应的开始标签的名称匹配。
<< / tag_name >>
注–标签正文元素区分大小写。
请阅读此链接并检查以下代码示例。 希望这对您有所帮助。
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合作,担任Developer推广员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.