MailMerge#用于使用Aspose.Words的每个字符串列表
本文关键字:字符串 列表 Words 用于 Aspose MailMerge# | 更新日期: 2023-09-27 18:19:51
我目前正在制作一个MailMerge文件,并希望显示一个字符串列表。在过去,我使用了一个对象列表(例如Customer
),并且能够在Word文档中有这样的东西:
{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}
然而,现在我有一个strings
而不是对象的列表,我只想显示它们:
{{ #foreach List }}
{{???}}
{{ /foreach List }}
那么,???
应该做什么呢。或者我应该将#foreach List
更改为.NET C#中的foreach,即{{ #foreach value in List }}
或类似的内容吗?
老实说,我还没能在MS Word文档中找到很多关于MailMerge的信息,也没有找到关于foreach的信息。
如果这不可能,我想我将不得不把字符串放在容器类中?类似:
public class StringContainer
{
public string String { get; set; }
}
和
{{ #foreach List }}
{{String}}
{{ /foreach List}}
编辑:
我们使用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));
}
}
我建议您使用Aspose.Words LINQ报告引擎来满足您的需求。
LINQ报告引擎的典型模板由描述模板结构和数据绑定的常见文档内容和标记组成。您可以使用运行的文本来形成这些标签,这些文本可以占据多个段落,以更具描述性。
标签主体必须满足以下要求:
- 标记体必须由"<<"answers">>"字符序列包围
- 标记体必须仅包含文本节点
- 标记体不能位于标记文档节点内,例如StructuredDocumentTag、CustomXmlMarkup或SmartTag
标签主体通常由以下元素组成:
- 标签名称
- 用括号括起来的表达式
- 一组可用于标记的开关,每个开关前面都有"-"字符
<lt;标签名称[expression]–switch1–switch2…>>
特定标签可以具有附加元素。有些标记需要关闭对应项。结束标记的名称前面有"/"字符。此标记的名称必须与相应的打开标记的名称相匹配。
<lt/标签名称>>
注意-标记体元素区分大小写。
请阅读此链接并检查以下代码示例。希望这对你有帮助。
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一起担任开发人员的传道者。